ORDER SIBLINGS BY 절은 계층 질의 결과 값들의 계층 정보를 유지하면서 특정 컬럼을 기준으로 오름차순 또는 내림차순으로 데이터를 정렬하며, 동일한 부모를 가진 자식 행들을 정렬할 수 있다.
계층적 질의문에서 데이터의 계층적 순서를 파악하기 위해 사용한다.
ORDER SIBLINGS BY col_1 [ASC|DESC] [, col_2 [ASC|DESC] […[, col_n [ASC|DESC]]…]]
R이라는 부모 행에 C1과 C2라는 자식 행들이 있다. C1은 C1_1, C1_2 및 C1_3이라는 자식 행을 가지며, C2는 C2_1, C2_2 및 C2_3의 자식 행을 가진다.
ORDER SIBLINGS BY 절을 명시하지 않고 데이터를 조회할 경우, 계층 질의에서는 아래와 같이 기본적으로 깊이 우선(depth-first) 순서에 따라 결과 데이터를 출력하고, 정렬을 수행하지 않는다.
ROWS |
COLUMN VALUES |
LEVEL |
---|---|---|
R(parent node) |
A |
Level 1 |
C1 |
B |
Level 2 |
C1_1 |
G |
Level 3 |
C1_2 |
F |
Level 3 |
C1_3 |
H |
Level 3 |
C2 |
D |
Level 2 |
C2_1 |
C |
Level 3 |
C2_2 |
E |
Level 3 |
C2_3 |
I |
Level 3 |
ORDER SIBLINGS BY 절을 이용하면 아래와 같이, 명시된 컬럼 리스트에 따라 데이터가 정렬되지만, 계층 관계를 파악하기 어렵다.
ROWS |
COLUMN VALUES |
LEVEL |
---|---|---|
R |
A |
Level 1 |
C1 |
B |
Level 2 |
C2_1 |
C |
Level 3 |
C2 |
D |
Level 2 |
C2_2 |
E |
Level 3 |
C1_2 |
F |
Level 3 |
C1_1 |
G |
Level 3 |
C1_3 |
H |
Level 3 |
C2_3 |
I |
Level 3 |
계층 질의 결과는 기본적으로 ORDER SIBLINGS BY 절에 명시된 컬럼 리스트를 따라 정렬된 부모와 그 부모의 자식 노드들이 연속적으로 출력되며, 동일 부모를 가지는 형제는 명시된 정렬 순서에 따라 정렬되어 출력된다.
다음은 동일한 부모를 가지는 행들을 정렬시키는 예제이다.
-- 동일한 부모를 가지는 자식 노드들을 연속 출력하기
SELECT id, mgrid, name, LEVEL
FROM tree
START WITH mgrid IS NULL
CONNECT BY PRIOR id=mgrid
ORDER SIBLINGS BY id;
id mgrid name level
===============================================
1 null Kim 1
3 1 Jonas 2
4 1 Smith 2
2 null Moy 1
5 2 Verma 2
6 2 Foster 2
7 6 Brown 3