동작하는 방식에 따라
1. UN-CORRELATED(비연관) 서브쿼리 - 서브쿼리가 메인쿼리 컬럼을 가지고 있지 않은 형태의 서브쿼리 - 메인쿼리에 서브쿼리가 실행된 결과 값을 제공하기 위한 목적 2. CORRELATED(연관) 서브쿼리 - 서브쿼리가 메인쿼리 컬럼을 가지고 있는 형태의 서브쿼리 - 일반적으로 메인쿼리가 먼저 수행된 후에 서브쿼리에서 조거닝 맞는지 확인하고자 할 때
위치에 따라
1. 스칼라 서브쿼리 - SELECT에 사용하는 서브쿼리 - 서브쿼리 결과를 마치 하나의 컬럼처럼 사용하기위해 주로 사용SELECT * | 컬럼명 | 표현식. (SELECT * | 컬럼명 | 표현식 FROM 테이블 or 뷰명 WHERE 조건) FROM 테이블명 or 뷰명2. 인라인뷰 - FROM 절에 사용하는 서브쿼리 - 서브쿼리 결과를 테이블처럼 사용하기 위해 주로 사용SELECT * | 컬럼명 | 표현식. FROM (SELECT * | 컬럼명 | 표현식 FROM 테이블 or 뷰명) WHERE 조건;3. WHERE절 서브쿼리 - 가장 일반적인 서브쿼리 - 값을 전달하기 위한 목적으로 주로 사용 (상수항의 대체)SELECT * | 컬럼명 | 표현식. FROM 테이블 or 뷰명 WHERE 조건연산자 (SELECT * | 컬럼명 | 표현식 FROM 테이블 or 뷰명 WHERE 조건)- WHERE 절 서브쿼리 종류 1. 단일행 서브쿼리 - 서브쿼리 결과가 1개의 행이 리턴되는 형태 2. 다중행 서브쿼리 - 서브쿼리 결과가 여러 행이 리턴되는 형태 - 비교연산자 (=, >, < ...) 사용 불가 - 다중행 서브쿼리 연산자 |IN|같은 값을 찾음| |> ANY|최소값을 반환함| |< ANY|최대값을 반환함| |< ALL|최소값을 반환함| |> ALL|최대값을 반환함| 3. 다중컬럼 서브쿼리 - 서브쿼리 결과가 여러 컬럼이 리턴되는 형태 4. 상호연관 서브쿼리 - 메인쿼리와 서브쿼리의 비교를 수행하는 형태 - 인라인뷰 (Inline View) - 쿼리 안의 뷰의 형태로 테이블처럼 조회할 데이터를 정의하기 위해 사용 - 테이블명 존재 X, 다른테이블과 조인시 반드시 테이블 별칭 명시 - 서브쿼리 결과를 메인쿼리의 어느 절에도 사용할 수 있음 - 스칼라 서브쿼리 - SELECT절에 사용하는 쿼리, 하나의 컬럼처럼 표현하기 위해 사용 - 각 행마다 스칼라 서브쿼리 결과가 하나여야함 - 조인의 대체 연산
SELECT COUNT(*), COUNT(EMPNO) FROM EMP;
SELECT SUM(SAL) FROM EMP;
SELECT
AVG(COMM), // 550 (null을 재외한 평균)
SUM(COMM) / COUNT(EMPNO) AS AVG2, // 157.142... (null 포함한 평균)
AVG(NVL(COMM, 0)) AS AVG3 // 157.142... (null 포함한 평균)
FROM EMP;
SELECT MIN(ENAME), MAX(ENAME) FROM EMP;
GROUPING SETS(DEPTNO, JOB, ());SELECT DEPTNO, JOB, SUN(SAL)
FROM EMP
GROUP BY GROUPING SETS(DEPTNO, JOB);
// 각각의 group by를 합쳐서 보여줌
SELECT DEPTNO, NULL AS JOB, SUM(SAL)
FROM EMP
GROUP BY DEPTNO
UNION ALL
SELECT NULL, JOB, SUM(SAL)
FROM EMP
GROUP BY JOB
SELECT DEPTNO, JOB, SUM(SAL)
FROM EMP
GROUP BY ROLLUP(DEPTNO, JOB)
// DEPTNO별, (DEPTNO, JOB)별, 전체 연산 결과 출력
SELECT DEPTNO, JOB, SUM(SAL)
FROM EMP
GROUP BY DEPTNO, JOB
UNION ALL
SELECT DEPTNO, NULL, SUM(SAL)
FROM EMP
GROUP BY DEPTNO
UNION ALL
SELECT NULL, NULL, SUM(SAL)
FROM EMP
SELECT DEPTNO, JOB, SUM(SAL)
FROM EMP
GROUP BY CUBE(DEPTNO, JOB);
// DEPTNO, JOB, (DEPTNO, JOB), 전체 총계 / 총 4개의 그룹핑된 값이 나옴
SELECT DEPTNO, JOB, SUM(SAL)
FROM EMP
GROUP BY DEPTNO, JOB
UNION ALL
SELECT DEPTNO, NULL, SUM(SAL)
FROM EMP
GROUP BY DEPTNO
UNION ALL
SELECT NULL, JOB, SUM(SAL)
FROM EMP
GROUP BY JOB
UNION ALL
SELECT NULL, NULL, SUM(SAL)
FROM EMP
SELECT DEPTNO, JOB, SUM(SAL)
FROM EMP
GROUP BY GROUPING SETS(DEPTNO, JOB, (DEPTNO, JOB), ());
홍쌤의 데이터랩
SQLD 2과목 PART2. SQL 활용 완벽 정리 (2024년 신유형 반영) 강의에 대해
공부 및 개인적으로 정리한 글 입니다.