1. 모든 서브쿼리는 메인 쿼리보다 먼저 실행된다?
X : Correlated subquery의 경우에는 메인 쿼리가 먼저 실행된다.
2. 스칼라(Scalar) 서브쿼리는 한번에 리턴 할 수 있는 최대 row 수가 1건이다?
O : 스칼라 서브쿼리는 최대 1건 리턴이며, 없는 경우에는 null을 리턴한다.
group by절 제외하고 다 가능!
NESTED SUBQUERY
SELECT A, B
FROM TABLE
WHERE C = (SELECT C
FROM TABLE2
WHERE A = 1)
여기서의 서브쿼리임!
메인보다 먼저 실행됨!
Correlated SUBQUERY
메인보다 나중에 실행됨. EXISTS네!!
Exists는 메인을 먼저 읽고 그 row를 가져와야 비교가 가능하니까!
Scalar SUBQUERY
함수같은 놈임. 1row만 뱉음!
select 절에서 자주 쓰는 subquery임. 그런것들은 main 건수마다 실행되게 되버림.
ROLLUP() & CUBE()
ROLLUP()은 각각 GROUP BY 마다 총계의 개념을 넣을 수 있음
여기에 각각의 소계까지 넣을거면 CUBE() 사용 하면 됨
사용법 :
SELECT D.DNAME
, E.JOB
, COUNT(*) AS CNT
, SUM(E.SAL) AS TOT_SAL
FROM DEPT D, EMP E
WHERE D.DEPTNO = E.DEPTNO
GROUP BY ROLLUP(D.DNAME, E.JOB) -- DNAME, JOB별 합계가 나온다!
ORDER BY 1, 2;
GROUPING SETS()
SELECT D.DNAME
, E.JOB
, COUNT(*) AS CNT
, SUM(E.SAL) AS TOT_SAL
FROM DEPT D, EMP E
WHERE D.DEPTNO = E.DEPTNO
GROUP BY GROUPING SETS((D.DNAME, E.JOB), (D.DNAME), (E.JOB), ()) --CUBE와 동일하게 출력 가능
ORDER BY 1, 2;
ANALYTICAL FUNCTIONS
RANK() OVER, ROW_NUMBER, SUM() OVER 등이 다 ANALYTICAL FUNCTIONS다.
처음 본 것! RATIO_TO_REPORT(SAL) OVER(PARTITION BY JOB)
-- 그룹 내 비율 관련
-- EMP 테이블에서 JOB별로 총SAL를 기준으로 각 ENAME의 급여를 백분률(소수점)으로 구하기!
SELECT JOB, ENAME, SAL
, RATIO_TO_REPORT(SAL) OVER(PARTITION BY JOB) AS RR -- 요놈!!
FROM EMP;
호오.. 비율을 구하는 것이다! 쓸만 할 듯 하네.
'DB > SQL튜닝' 카테고리의 다른 글
MYSQL 쿼리 튜닝 - force index, join 컬럼 type 수정 (1) | 2022.09.29 |
---|---|
업무에 바로 쓰는 SQL튜닝 입문 - 8교시(조인조건 없는 조인) (0) | 2022.09.27 |
업무에 바로 쓰는 SQL튜닝 입문 - 7교시(SORT/MERGE/HASH 조인) - 문제 (0) | 2022.09.27 |
업무에 바로 쓰는 SQL튜닝 입문 - 7교시(SORT/MERGE/HASH 조인) (0) | 2022.09.27 |
업무에 바로 쓰는 SQL튜닝 입문 - 6교시(NESTED LOOPS 조인) - 문제 (2) | 2022.09.27 |