오늘은 계층형 질의, 셀프 조인, PIVOT절과 UNPIVOT절에 관련하여 공부한 내용을 정리하도록 하겠습니다.
- 계층형 데이터 모델은 부모-자식 관계를 정의하여 트리 구조와 같이 데이터를 모델링하는 것을 의미한다.

- ROOT NODE: 최상위 노드
- LEAF NODE: 최하위 노드
- 부모노드: 상위 노드
- 자식노드 하위 노드
1) 계층형 질의
- 계층 구조를 가지는 칼럼을 대상으로 데이터를 출력할 때 사용하는 키워드
| 순번 | 키워드 | 설명 |
| 1 | LEVEL | - 현재 레벨 또는 깊이를 반환한다 - 루트 노드 = 1 |
| 2 | SYS_CONNECT_BY_PATH | - 최상위 루트 노드부터 현재 노드까지의 경로를 출력한다 |
| 3 | START WITH | - 루트 노드를 지정한다 |
| 4 | CONNECT BY | - 부모 노드와 자식 노드의 연결을 지정한다 |
| 5 | CONNECT_BY_ROOT | - 루트노드로 지정된 칼럼 값을 반환한다 |
| 6 | CONNECT_BY_LEAF | - 리프 노드면 1을 반환하고 그렇지 않다면 0을 반환한다 |
| 7 | PRIOR | - 바로 상위의 부모 노드를 반환한다 |
| 8 | NOCYCLE | - 무한 루프를 방지한다 |
| 9 | ORDER SIEBLINGS BY | - 같은 레벨의 노드끼리 정렬한다 |
| 순번 | 방향 | 작성 |
| 1 | 순방향 | PRIOR - 자식 - 부모 |
| 2 | 순방향 | 부모 - PRIOR - 자식 |
| 3 | 역방향 | PRIOR - 부모 - 자식 |
| 4 | 역방향 | 자식 - PRIOR - 부모 |
- 같은 테이블에 대해서 조인을 수행하도록 쿼리를 작성하는 것
- 계층적인 분류 값을 가질는 칼럼을 다룰때 주로 사용함
- 시각적 편이성을 위해 사용
- 행과 열의 관점을 바꿔서 행의 관점에서 각각의 칼럼 값들을 나열하는 것
- 행과 열을 전환하여 재구성하는 것
- FROM 절 뒤에 나온다
- SELECT문에 작성한 첫번째 칼럼 값으로 그룹핑을 진행함

위 그림은 PIVOT의 예시입니다
좌측처럼 기존의 테이블에서 각 사단별 새로 전입온 신병이 몇명인지 직관적으로 확인이 어려울 때 PIVOT을 활용합니다.
[SQL문]
SELECT * FROM (SELECT 계급, 소속 FROM 신병)
PIVOT(COUNT(*) FOR 소속 IN( 1 AS '1사단',
2 AS '2사단',
3 AS '3사단'));
-> 계급으로 그룹핑을 진행한다
-> 소속에 대해 각 값을 '1사단, '2사단', '3사단'으로 치환하여 칼럼을 생성한다
-> 각 칼럼에 들어가는 항목을 COUNT를 진행한다.
- 열을 행으로 변환한다
- GROUP BY 연산을 수행하기 위해 주로 사용

[SQL문]
SELECT 장르, 연도, 관람객 FROM (SELECT * FROM 영화관람객)
UNPIVOT(영화관람객 FOR 연도 IN( 2020 AS '2020년',
2021 AS '2021년',
2022 AS '2022년',
2023 AS '2023년'));
-> UNPIVOT의 결과는 장르, 연도, 관람객 으로 구성된 테이블이다
-> 2020, 2021, 2022, 2023을 2020년, 2021년, 2022년, 2023년으로 변경하고 연도 칼럼의 값으로 표시한다
-> 첫번째 칼럼인 장르는 연도 칼럼의 수 만큼 중복으로 표시한다
-> 기존 테이블의 값들을 세번째 칼럼에 정리된다
| 오픈마켓의 모델링 (모델링 연습 1) (0) | 2025.07.03 |
|---|---|
| SQLD 공부 13일 차! (0) | 2025.06.11 |
| SQLD 공부 11일 차! (0) | 2025.06.09 |
| SQLD 공부 10일 차! (7) | 2025.06.08 |
| SQLD 공부 9일 차! (0) | 2025.06.05 |