[SQL][ORACLE] 계층형 쿼리

bamboocoding·2024년 8월 11일

<테이블 TAB1>

SELECT C1, C2, C3, LEVEL
FROM TAB1
START WITH C2 IS NULL
CONNECT BY PRIOR C1 = C2
ORDER SIBLINGS BY C3 DESC;

위의 쿼리는 계층형 쿼리를 다루고 있다.
START WITH C2 IS NULL
START WITH로 계층 구조의 시작점을 지정한다.
C2 값이 NULL인 행부터 시작한다.

CONNECT BY PRIOR C1 = C2
PRIOR 자식 = 부모 관계로, 부모에서 자식 방향으로 순방향 전개를 한다.
(LEVEL = 1)
C1 = 1 C2 = NULL C3 = A
(LEVEL = 2)
C1 = 2 C2 = 1 C3 = B
C1 = 3 C2 = 1 C3 = C
(LEVEL = 3)
C1 = 4 C2 = 2 C3 = D

ORDER SIBLINGS BY C3 DESC
동일한 부모 아래 있는 노드들의 정렬하는데 사용된다.
여기서는 C3열을 기준으로 내림차순 정렬한다.
동일 레벨의 2개 이상의 노드를 가진건 LEVEL2이므로 최종적으로 다음과 같이 된다.

(LEVEL = 1)
C1 = 1 C2 = NULL C3 = A
(LEVEL = 2)
C1 = 3 C2 = 1 C3 = C
C1 = 2 C2 = 1 C3 = B
(LEVEL = 3)
C1 = 4 C2 = 2 C3 = D

profile
배운 것을 기록하는 습관을 길들이자.

0개의 댓글