하나의 SQL문 안에 포함되어 있는 또 다른 SQL문, 알려지지 않은 기준을 이용한 검색에 사용
- 괄호를 감싸서 사용
- 단일행 또는 복수행 비교연산자와 함께 사용 가능
- ORDER BY 사용 불가
- WHERE 구에 SELECT 문을 사용하면 서브쿼리
컬럼을 반환하는 서브쿼리, 주로 SELECT에서 사용 -> FROM절에는 올 수 없다.
FROM절에서 사용되는 서브쿼리 -> 메인쿼리에서 사용 가능 ORDER BY를 사용 가능
WHERE, HAVING
동작 방식
㉠. 비연관 서브쿼리 : 서브쿼리 내에 메인쿼리의 컬럼이 존재하지 않는다.
㉡. 연관 서브쿼리 : 서브쿼리 내에 메인쿼리의 컬럼이 존재
반환 데이터
㉠. 단일행 서브쿼리 : 실행결과 1건 이하
-> 단일행 비교연산자 : =, <, >, <> 등
㉡. 다중행 서브쿼리 : 실행결과 2건 이상
㉡-1 IN : 반환되는 여러 개의 행 중 하나만 참 이여도 참
-> WHERE COL1 IN('A', 'B')는 COL1 = 'A' or COL1 = 'B'를 의미
-> IN 안에 NULL이 와도 무시
-> WHERE COL1 NOT IN(a, b)은 COL1 ≠ a and COL1 ≠ b의미 그래서 NULL 포함이면 항상 거짓
㉡-2 ALL : 메인 서브 쿼리의 결과가 모두 동일하면 참
-> '<ALL:최솟값 반환','>ALL:최댓값 반환'
-> WHERE COL1 = ALL(서브쿼리)
㉡-3 ANY : 메인쿼리의 비교조건이 서브 쿼리 결과 중 하나 이상 동일하면 참
-> '<ANY:하나라도 크만 참','>ANI=Y:하나라도 작으면 참'
㉡-4 EXISTS : 서브쿼리로 어떤 데이터의 존재 여부를 확인
-> 메인/서브 쿼리의 결과가 하나라도 존재한다면 참
-> TRUE/FALSE -> WHERE EXIST(서브쿼리)
㉢. 다중 컬럼 서브쿼리 : 실행결과 컬럼 여러 개 -> SQL Server에서는 X
테이블로부터 유도된 가상의 테이블로 실제 데이터를 가지고 있지 않고 테이블을 참조해서 원하는 컬럼만 조회
장점
- 독립성 : 테이블 구조가 변경되어도 뷰를 사용하는 응용프로그램은 변경하지 않아도 된다.
- 편리성 : 복잡한 질의를 뷰로 생성하여 질의 단순하게 가능. 또한 해당 SQL 자주 사용 시 뷰를 이용하면 편히
- 보안성 : 복잡한 쿼리 구문을 뷰명으로 단축시킴으로써 가독성을 높이고 편리하게 사용
조인을 사용하지 않고 연관 데이터를 조회하는 방법 중 하나로 2개 이상의 질의 결과를 하나로 만들어줌
- UNION ALL(합집합) : 중복된 행도 그대로 출력
- UNION(합집합) : 중복된 행은 한 줄로 출력
- INTERSECT(교집합) : 중복된 행은 한 줄로 출력
- MINUS/EXCEPT(차집합) : 중복된 행은 한 줄로 출력
특정 그룹에 대해 작업을 수행하고 결과를 반환하는 함수로 관계형
- 집계함수 : COUNT, SUM, AVG, MAX, MIN 등
- 소계(총계)합수 : ROLLUP, CUBE, GROUPING SETS 등
- ROLLUP(COL1) : COL1 별 그룹핑 + 총계
- ROLLUP(COL1, COL2) :
COL1, COL2별 그룹핑
+ COL1
+ 총계
- ROLLUP((COL1, COL2), COL3) :
COL1, COL2, COL3별 그룹핑
+ COL1, COL2별 그룹핑
+ 총계
- ROLLUP(COL1, (COL2, COL3)) :
COL1, COL2, COL3별 그룹핑
+ COL1
+ 총계
- ROLLUP(COL1, COL2, COL3) :
COL1, COL2, COL3별 그룹핑
+ COL1, COL2별 그룹핑
+ COL1
+ 총계

- CUBE(COL1) : COL1별 그룹핑 + 총계
- CUBE(COL1, COL2) :
COL1, COL2별 그룹핑
+ COL1 + COL2
+ 총계
- CUBE((COL1, COL2), COL3) :
COL1, COL2, COL3별 그룹핑
+ COL1, COL2별 그룹핑
+ COL3
+ 총계
- CUBE(COL1, (COL2, COL3)) :
COL1, COL2, COL3별 그룹핑
+ COL1
+ COL2, COL3별 그룹핑
+ 총계
- CUBE(COL1, COL2, COL3) :
COL1, COL2, COL3별 그룹핑
+ COL1, COL2별 그룹핑 + COL1, COL3별 그룹핑 + COL2, COL3별 그룹핑
+ COL1 + COL2 + COL3
+ 총계

- GROUPING SETS(COL1) : GROUP BY COL1과 동일
- GROUPING SETS(COL1, COL2) : COL1 + COL2
- GROUPING SETS(COL1, COL2, ()) : COL1 + COL2 + 총계
- GROUPING SETS(COL1, ROLLUP(COL2)) : COL1 + COL2 + 총계
- GROUPING SETS(COL1, COL2, COL3) : COL1 + COL2 + COL3
- GROUPING SETS(COL1, COL2, ROLLUP(COL3)) : COL1 + COL2 + COL3 + 총계
- GROUPING SETS(COL1, ROLLUP(COL2, COL3)) :
COL1
+ COL2, COL3
+ COL2
+ 총계
- GROUPING SETS(ROLLUP(COL1, COL2), COL3) :
COL1, COL2
+ COL1 + COL3
+ 총계

- OVER, PARTITION BY는 분석함수와 함께 사용
- SELECT SUM(SAL) OVER(PARTITION BY DEPT)
OVER 구문 필수, PARTITION BY 구문 이용하여 집계의 대상이 되는 레코드 범위를 지정
- RANK : 동일한 값에 대해서는 동일한 순위를 부여(1,2,2,4,5,5,7...)
- DENSE_RANK : 동일한 순위를 하나의 등수로 간주(1,2,2,3,4,4,5...)
- ROW_NUMBER : 그냥 처음~마지막까지 고유한 순위 부여, 중복 X
- SUM/AVG : 파티션 별로 합계/평균을 계산
- COUNT : 파티션 별로 행 수를 계산
- MAX/MIN : 파티션 별로 최댓값/최솟값 계산
- FIRST_VALUE : 파티션별 윈도우의 처음 값
- LAST_VALUE : 파티션별 윈도우의 마지막 값
- LAG : 파티션별 윈도우에서 이전 몇번째 행의 값
- LEAD : 파티션별 윈도우에서 이후 몇번째 행의 값
- RATIO_ID_REPORT : 파티션 내 전체 SUM에 대한 행별 컬럼 값의 백분율을 소수점까지 조회
-> 컬럼 값/ 전체 합한 값을 백분율로- PERCENT_RANK : 파티션에서 제일 먼저 나온 것은 0, 제일 늦게 나온 것은 1로 하여 값이 아닌 행의 순서 별 백분율 조회
-> (현재 행 순위 -1)/ (전체 행 순위 -1)- CUBE_DIST : 현재 행보다 작거나 같은 건수에 대한 누적 백분율로 구한다. 결과 값이 0보다 크고 1보다 작은 값을 가지는 함수
-> 그룹 1개 행 -> 1
그룹 2개 행 -> 0.5,1
그룹 3개 행 -> 0.333, 0.666, 1- NTILE : 파티션 별로 전체 건수를 인자 값으로 N등분한 결과를 조회
- CURRENT ROW : 현재 행
- UNBOUNDED PRECEDING : 첫번째 행, end point에서 사용 불가
- UNBOUNDED FOLLOWING : 마지막 행, start point에서 사용 불가
- n PRECEDING : 현재 행에서 위로 n만큼 이동
- n FOLLOWING : 현재 행에서 아래로 n만큼 이동
- ROWNUM : 조회되는 행 수를 제한할 때 많이 사용(페이지 단위 출력은 인라인 뷰)
나 자신과의 조인
테이블에 계층 구조를 이루는 컬럼이 존재할경우 계층 쿼리를 이용해서 데이터를 출력
- LEVEL : 현재의 DEPTH를 반환. 루트 노드는 1이 된다.
- SYS_CONNECT_BY_PATH(컬럼, 구분자) : 루드 노드부터 현재노드까지의 경로를 출력해주는 함수
- START WITH : 경로가 시작되는 루드 노드를 생성해주는 절
- CONNECT BY : 루드로부터 자식노드를 생성해주는 절, 조건에 만족하는 데이터가 없을 때 노드를 생성
- PRIOR : 바로 앞에 있는 부모 노드의 값을 반환
- CONNECT_BY_ROOT 컬럼 : 루드노드의 주어진 컬럼 값을 반환
- CONNECT_BY_ISLEAF : 가장 하위 노드인 경우 1을 반환하고 그 외에는 0을 반환