제1절 서브쿼리(Subquery)
- 연관 서브쿼리 : 서브쿼리가 메인 쿼리의 칼럼을 포함함
- 비연관 서브쿼리 : 메인 쿼리에 값을 제공하기 위한 목적
- 단일 행 서브쿼리 : 실행 결과가 항상 1건 이하이며 단일 행 비교 연산자( = , < , > , <= , >= , <> )와 함께 사용
- 다중 행 서브쿼리 : 실행 결과가 여러 건이며 다중 행 비교 연산자와 함께 사용
다중 행 비교 연산자
(연산자 : 설명)
IN : 결과에 값이 포함되는지 확인 (OR 조건)
ANY : 결과 중 하나라도 조건을 만족하는지 확인
ALL : 모든 값이 조건을 만족하는지 확인
EXISTS : 결과가 존재하는지 여부를 확인
서브쿼리의 형태
- 다중 칼럼 서브쿼리 : 여러 칼럼을 반환하며 메인 쿼리의 조건절에서 여러 칼럼을 동시에 비교 가능
- 스칼라 서브쿼리 : SELECT 절에서 사용되며 한 행, 한 칼럼만을 반환
- 인라인 뷰 (동적 뷰) : FROM 절에서 사용되며 서브쿼리를 임시 테이블처럼 사용
- HAVING절, ORDER BY절 등에서도 사용 가능
제2절 집합 연산자
- UNION : 중복 제거
- UNION ALL : 결과 전부 합침 (중복 포함)
- INTERSECT : 교집합 (중복 제거)
- EXCEPT : 차집합 (중복 제거)
제3절 그룹 함수
- NULL 값은 제외하고 집계 수행
- 결과값이 없는 행은 출력되지 않음
표현식과 의미
- ROLLUP(1,2) : 1과 2별 소계, 1별 소계, 총합계 (계층 구조로 계산, 순서 바뀌면 결과 달라짐)
- CUBE(1,2) : 1과 2별 소계, 1별 소계, 2별 소계, 총합계 (순서 무관)
- GROUPING SETS(1,2) : 1별 소계, 2별 소계 (순서 무관)
제4절 윈도우 함수
- 결과 건수에는 영향을 미치지 않고 결과에 대한 처리만 수행
구분별 주요 함수
- 순위 함수 : ROW_NUMBER, RANK, DENSE_RANK
- 집계 함수 : SUM, AVG, MAX, MIN, COUNT
- 행 순서 관련 함수 : FIRST_VALUE, LAST_VALUE, LAG, LEAD
- 비율 함수 : PERCENT_RANK, CUME_DIST, NTILE
윈도우 함수 문법
SELECT 윈도우함수(A) OVER (PARTITION BY 칼럼 ORDER BY 칼럼 윈도잉절)
FROM 테이블명
윈도잉절의 종류
- BETWEEN a AND b : 프레임 범위 지정
- UNBOUNDED PRECEDING / FOLLOWING : 프레임 시작 또는 끝을 현재 윈도우 그룹의 첫 행 / 마지막 행으로 설정
- N PRECEDING / FOLLOWING : 현재 행 기준으로 지정된 수만큼 이전 / 이후 행을 나타냄
- CURRENT ROW : 현재 행 기준으로 프레임 설정
제5절 Top N 쿼리
- ORDER BY : 데이터 정렬
- LIMIT : 정렬된 결과에서 상위 N개 행 선택
- FETCH : 결과 집합에서 상위 N개 행 선택
- TOP(N) WITH TIES : 상위 N위와 값이 같은 경우 함께 출력
제6절 계층형 질의와 셀프 조인
- CONNECT BY : 트리 형태의 계층 구조로 쿼리 수행
- START WITH : 계층 구조 전개의 시작 위치(최상위 행) 지정
- CONNECT_BY_ROOT / ISLEAF : 최상위 / 하위 계층 값 확인
- SYS_CONNECT_BY_PATH : 계층 구조의 전개 경로 표시
- ORDER SIBLINGS BY : 형제 노드 간 정렬
추가 사항
- SQL Server에서는 CTE(Common Table Expression)를 재귀 호출하여 계층 구조를 전개
- 앵커 멤버를 먼저 실행해 기본 결과 집합 생성 후 재귀 멤버를 반복 실행
- 오라클의 계층형 질의문에서 WHERE절은 모든 전개를 진행한 뒤 필터링 조건으로 사용
- PRIOR 키워드는 CONNECT BY절뿐 아니라 SELECT, WHERE절에서도 사용 가능
셀프 조인
- 동일 테이블 간 조인으로, 테이블 식별을 위해 반드시 별칭(Alias)을 사용
- 예시
SELECT ALIAS1.칼럼명, ALIAS2.칼럼명
FROM 테이블 ALIAS1, 테이블 ALIAS2
WHERE ALIAS1.칼럼명2 = ALIAS2.칼럼명1;
뷰(View)의 장점
- 독립성 : 테이블 구조가 변경되어도 뷰를 사용하는 응용 프로그램은 수정 불필요
- 편리성 : 복잡한 질의를 단순하게 작성 가능
- 보안성 : 숨기고 싶은 정보를 제외하고 생성 가능
'Hello World > SQLD' 카테고리의 다른 글
[2-3 SQL 관리 구문] (0) | 2025.10.15 |
---|---|
[2-1 SQL 기본 및 활용] (0) | 2025.10.11 |
[1-2] 데이터 모델과 SQL (0) | 2025.10.11 |
[1-1] 데이터 모델링의 이해 (6) | 2025.01.07 |