본문 바로가기

반응형

Data Science

(60)
[프로그래머스] 5. JOIN 조인을 할 경우에는 :테이블명에 ALIAS를 붙여 같은 칼럼명끼리의 조인이 가능하게 한다. 조인의 방법 ① WHERE 조인 -> 테이블1 , 테이블2 / 테이블1 JOIN 테이블2 WHERE 테이블1.칼럼1 = 테이블2.칼럼1 ② LEFT, RIGHT 조인 -> 테이블1 LEFT JOIN 테이블2 ON이나 USING 필수 순서 : FROM -> ON -> JOIN -> WHERE -> 즉, 내부조인에서 조건을 ON절에 명시하나 WHERE절에 명시하나 결과는 같다. 하지만, 외부 조인에서는 결과가 달라진다. SELECT d.deptno, sum(e.sal) FROM dept d LEFT OUTER JOIN emp e ON d.deptno = e.deptno WHERE e.sal > 2000 GROUP BY..
[프로그래머스] 4. IS NULL NULL값에 대한 AVG 처리 AVG() : 평균을 구하는 함수, 모든 집계함수는 NULL값을 제외하므로, 잘못된 평균 결과가 반환된다 sum(~) / count(*) : count(*)는 NULL 값을 포함한 개수를 반환하므로, 올바른 평균 결과가 반환된다. 따라서 AVG함수를 사용할 때에는, NVL을 이용해 NULL을 0으로 치환하는 작업이 우선되어야 한다. AVG(NVL(comm , 0)) SUM(comm) / COUNT(*) NULL인 결과도 추가하기 WHERE NVL(job, 'NONE') != 'MANAGER LNNVL(job = 'MANAGER') WHERE (job != 'MANAGER' OR job IS NULL) NULL 처리 ① job IS NULL (NULL을 조건으로 사용할 때는 ..
[프로그래머스] 3. GROUP BY GROUP BY에는 ALIAS를 사용하지 못한다. -> SELECT문이 처리 순서가 가장 마지막이기 때문에 : WHERE -> GROUP BY -> HAVING -> 처리 속도를 위해 불필요한 조건들은 WHERE절에서 제외시키는 것이 좋다. 계층형 쿼리 더보기 계층형 질의 가상 칼럼 설명 LEVEL 루트 데이터이면 1, 그 하위 데이터이면 2. 리프 데이터까지 1씩 증가한다. CONNECT_BY_ISLEAF 전개 과정에서 해당 데이터가 리프 데이터이면 1, 그렇지 않으면 0 CONNECT_BY_ISCYCLE 전개 과정에서 자식을 갖는데, 조상으로 존재시 1, 그렇지 않으면 0. 여기서 조상은 자신으로부터 루트까지 경로에 존재하는 데이터 CYCLE 옵션 사용시에만 사용 가능 함수 설명 SYS_CONNECT..
[프로그래머스] 2. SUM, MAX, MIN (+ 누적합계) 분석함수([칼럼]) OVER(PARTITION BY 칼럼1, 칼럼2... [ORDER BY 절] [WINDOWING 절]) -> 분석함수 사용시 OVER 절 사용 가능 -> PARTITION 사용시엔 해당 칼럼으로 그룹화 -> PARTITION 사용하지 않으면, 전체 여러 칼럼을 이용해 그룹화 SELECT empno , ename , job , deptno , sal , SUM(sal) OVER(PARTITION BY job, deptno) FROM emp WHERE job IN ('MANAGER', 'SALESMAN') ORDER BY job 누적합계 구하기 -> EMP번호 순 SELECT empno , ename , job , sal , SUM(sal) OVER(ORDER BY empno) AS sa..
[프로그래머스] 1.SELECT 1. 모든 레코드 조회하기 -- 코드를 입력하세요 SELECT * FROM ANIMAL_INS ORDER BY ANIMAL_ID; 2. 역순 정렬하기 -- 코드를 입력하세요 SELECT NAME, DATETIME FROM ANIMAL_INS ORDER BY ANIMAL_ID DESC; 3. 아픈 동물 찾기 -- 코드를 입력하세요 SELECT ANIMAL_ID, NAME FROM ANIMAL_INS WHERE INTAKE_CONDITION='Sick' ORDER BY ANIMAL_ID; 4. 어린 동물 찾기 -- 코드를 입력하세요 SELECT ANIMAL_ID, NAME FROM ANIMAL_INS WHERE INTAKE_CONDITION !='Aged' ORDER BY ANIMAL_ID; 5. 동물의 아..
[Oracle] 1. SELECT문 처리과정 1. Server Process 구조 유저 프로세스 -> 서버 프로세스로 SELECT문 요청시 서버 프로세스에서 SELECT문 처리 과정에 따라 처리 서버 프로세스 구조 공유메모리 영역과 백그라운드 프로세스 영역으로 나뉘어져 있다. 공유메모리 영역 -> SGA SGA -> 공유 풀, DB 버퍼 캐시, 리두 로그 버퍼 공유 풀 메모리 -> 라이브러리 캐시영역, 로우 캐시영역 라이브러리 캐시 영역 : SQL문장 실행 정보를 관리 로우 캐시 영역 : 오브젝트 딕셔너리 정보가 로우단위로 저장 백그라운드 프로세스 영역 -> 인스턴스와 데이터베이스 인스턴스에는 DBWn, SMON, CKPT, PMON, LGWR 데이터베이스에는 컨트롤 파일, 데이터 파일, 온라인 리두 로그 파일 2. Select문 처리 과정 [공유..
[SQLP] 7-1. 통계정보와 비용 계산 원리 통계정보에 해당하는 항목과 옵티마이저가 통계정보를 활용해 비용을 계산하는 원리 1. 선택도와 카디널리티 선택도 전체 레코드 중에서 조건절에 의해 선택되는 레코드 비율 '=' 조건 검색시 선택도 = 1 / NDV (컬럼 값 종류 개수) 카디널리티 전체 레코드 중에서 조건절에 의해 선택되는 레코드 개수 카디널리티 = 총 로우 수 x 선택도 = 총 로우 수 / NDV 조건절에 대한 선택도가 25%일 때, 전체 레코드가 10만 건이라면, 카디널리티는 2만 5천건이다. 옵티마이저는 조건절에 의해 카디널리티를 구하고, 그만큼의 데이터를 액세스하는 데 드는 비용을 계산해 테이블 액세스 방식, 조인 순서, 조인 방식을 결정한다. 이처럼 비용을 계산하는데에는 선택도부터 시작되기 때문에, 선택도를 정확히 계산해야 한다. ..
[SQLP] 3-1. 테이블 액세스 최소화 SQL 성능 향상을 위한 느린 랜덤 I/O 극복하기 -> 테이블 램덤 액세스가 성능에 미치는 영향과 그에 따른 테이블 랜덤 액세스를 최소화하는 방법 1. 테이블 랜덤 액세스 인덱스에 대한 맹신 또는 섣부른 자신감 1. 대용량의 테이블에서 인덱스를 사용해 조회시 빠르다. 2. 대량 데이터 조회시 인덱스 사용하면 테이블 전체 스캔보다 느리다. 인덱스 ROWID의 실체 -> 물리적 주소와 논리적 주소 : 디스크 상에서 테이블 레코드를 찾아가기 위한 위치 정보를 담은 논리적 주소 인덱스를 이용해 테이블 액세스하는 실행계획 SELECT * FROM 고객 WHERE 지역 = '서울'; Execution Plan ----------------------------------------------------------..

반응형