1. 서브쿼리
- 단일행 서브쿼리: 결과가 1개 행 반환 → 비교 연산자(=, <, > 등) 사용 가능
- 다중행 서브쿼리: 결과가 여러 행 반환 → 일반 비교 연산자 사용 불가, IN / ALL / ANY 사용
※ 다중행 비교 연산자(ALL, ANY)는 단일행 서브쿼리에도 사용 가능 단, 단일행 비교 연산자는 다중행 서브쿼리에 사용 불가!
- 서브쿼리는 단일행 또는 복수행 비교 연산자와 함께 사용할 수 있다. (○)
- 복수행 결과에 =, <=, >= 사용 가능? (✕) → IN, ALL, ANY 사용
- 다중 칼럼 서브쿼리 → SQL Server는 지원하지 않는다. (✕)
- 연관 서브쿼리는 주로 메인쿼리에 값을 제공하기 위한 목적? (✕) → 비연관 서브쿼리가 메인쿼리에 값 제공. 연관 서브쿼리는 메인쿼리 값을 받아 필터링
- 뷰(VIEW)
- 테이블 구조 변경 시 응용 프로그램도 변경해야 한다? (✕) → 독립성으로 불필요
- 뷰 사용 장점: 독립성 / 편리성 / 보안성
2. 집합 연산자
- UNION: 중복 행을 하나로 합쳐서 반환
- UNION ALL: 중복 행도 그대로 모두 포함하여 반환
- UNION 사용 시 각 집합에 GROUP BY 사용 가능 (o)
- UNION 사용 시 각 집합에 ORDER BY 사용 가능? (x)
→ ORDER BY는 최종 결과 마지막 줄에 한 번만 사용 가능
- INTERSECT 동치 변환 INTERSECT
→ NOT EXISTS (MINUS 변환)
→ IN (서브쿼리) → 중복 주의!
→ INNER JOIN → 중복 주의!
- 순위 함수 RANK: 동순위 건너뜀 (1,1,3,3,5)
DENSE_RANK: 동순위 안 건너뜀 (1,1,2,2,3)
ROW_NUMBER: 무조건 고유 번호 (1,2,3,4,5)
PERCENT_RANK: 0~1 사이 값
CUME_DIST: 누적 분포, 0~1 사이 값
NTILE(N): N등분 구간 번호 부여
RATIO_TO_REPORT: 그룹 내 합계 대비 비율
※ 1,1,2,2,3,3,4,4,5,5 패턴 → NTILE(5)!
※ NTILE은 순위가 아닌 구간 번호 부여 (DENSE_RANK와 혼동 주의)
3. 그룹 함수
GROUPING SETS(A,B) = (A), (B)
ROLLUP(A,B) = (A,B), (A), ()
ROLLUP((A,B)) = (A,B), ()
CUBE(A,B) = (A,B), (A), (B), ()
4. 윈도우 함수
- SUM + ORDER BY 있으면 → 누적합!
SUM(급여) OVER (PARTITION BY 부서코드) → 부서 전체합
SUM(급여) OVER (PARTITION BY 부서코드 ORDER BY 사원번호) → 부서 내 누적합
- 윈도우 함수 처리로 결과 건수가 줄어든다? (x) → 결과 건수 변화 없음
5. TOP N 쿼리
- TOP(N): 무조건 N행만 반환
- TOP(N) WITH TIES: N위와 동점이면 함께 추가 출력 (ORDER BY 필수)
6. 계층형 질의와 셀프 조인
- ORDER SIBLINGS BY: 형제 노드 사이 정렬 지정 구문 (o)
- 순방향 전개: 부모 노드 → 자식 노드 방향 (o)
- 루트 노드의 LEVEL 값은 0이다? (x) → LEVEL 값은 1