SELECT C1, C2, C3
FROM TAB1
START WITH C2 IS NULL
CONNECT BY PRIOR C1 = C2
ORDER SIBLINGS BY C3 DESC;
C1 C2 C3
---------- ---------- ----------
1 A
3 1 C
2 1 B
4 2 D
A -> 1번
│
├── B -> 3번
│ │
│ ├── D -> 4번
│
└── C -> 2번
SELECT C1, C2, C3, LEVEL
FROM TAB1
START WITH C2 IS NULL
CONNECT BY PRIOR C1 = C2
ORDER SIBLINGS BY C3 DESC;
C1 C2 C3 LEVEL
---------- ---------- ---------- ----------
1 A 1
3 1 C 2
2 1 B 2
4 2 D 3
// LEVEL: 계층 구조에서의 깊이를 나타냅니다. 루트 노드는 1부터 시작하며, 자식 노드로 갈수록 증가합니다.
// START WITH: 계층적 쿼리가 시작되는 루트 노드를 지정합니다.
// CONNECT BY PRIOR: 계층적 관계를 정의합니다. PRIOR 키워드를 사용하여 부모와 자식 간의 관계를 나타냅니다.
// ORDER SIBLINGS BY: 동일한 부모를 가진 형제 노드들 간의 순서를 제어합니다.
START WITH
1. C2 IS NULL인 행을 기준으로 시작 => A
PRIOR C1 = C2
2. A의 C1 = 1 / C2 = 1가 되는 행을 찾는다. B와 C가 있다.
B와 C는 형제노드이고, DESC 정렬순으로 C를 먼저 찾는다. => C
3. C의 C1 = 3 / C2 = 3가 되는 행을 찾는다. => 없음
4. B와 C는 형제 노드이고, 남은 B를 조회한다. => B
5. B의 C1 = 2 / C2 = 2가 되는 행을 찾는다. => D
5. D의 C1 = 4 / C2 = 4가 되는 행을 찾는다. => 없음