상세 컨텐츠

본문 제목

SQLD 공부 12일 차!

SQL과 데이터베이스

by 크앙크아앙 2025. 6. 10. 22:44

본문

오늘은 계층형 질의, 셀프 조인, PIVOT절과 UNPIVOT절에 관련하여 공부한 내용을 정리하도록 하겠습니다.


1. 계층형 데이터 모델

- 계층형 데이터 모델은 부모-자식 관계를 정의하여 트리 구조와 같이 데이터를 모델링하는 것을 의미한다.

- 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 - 부모

 


2. 셀프 조인

- 같은 테이블에 대해서 조인을 수행하도록 쿼리를 작성하는 것

- 계층적인 분류 값을 가질는 칼럼을 다룰때 주로 사용함


 

3. PIVOT절

- 시각적 편이성을 위해 사용

- 행과 열의 관점을 바꿔서 행의 관점에서 각각의 칼럼 값들을 나열하는 것

- 행과 열을 전환하여 재구성하는 것

- 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를 진행한다.

 


4. UNPIVOT 절

- 열을 행으로 변환한다

- 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년으로 변경하고 연도 칼럼의 값으로 표시한다

-> 첫번째 칼럼인 장르는 연도 칼럼의 수 만큼 중복으로 표시한다

-> 기존 테이블의 값들을 세번째 칼럼에 정리된다

'SQL과 데이터베이스' 카테고리의 다른 글

오픈마켓의 모델링 (모델링 연습 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

관련글 더보기