START WITH ~ CONNECT BY
- START WITH : 계층 구조의 데이터를 읽어나가는데 있어 시작점을 지정한다.
- CONNECT BY : 다음에 읽을 자식 데이터를 지정한다.
- CONNECT BY의 조건식에 'PRIOR 자식컬럼 = 부모컬럼' : 이 형태의 조건을 사용하면 계층 구조의 데이터를 부모 → 자식 방향으로 내려가는 순방향 조회를 한다.
- NOCYCLE : 데이터를 읽어가면서 이미 조회했던 동일한 데이터를 다시 읽게 될 겨우 사이클(CYCLE)이 형성되었다고 하는데 NOCYCLE을 명시할 경우 사이클이 발생한 이후의 데이터는 읽지 않는다. CONNECT BY에 작성한다.
- ORDER SIBLINGS BY : ORDER BY와 다르게 형제(SIBLINGS) 노드 즉, 동일한 LEVEL의 데이터 사이에서 정렬을 한다.
예시
SELECT LEVEL lv
FROM ITEM
SELECT를 했을 경우 lv의 값은 0이 나오는데 이는 계층이 존재하지 않기 때문에 그렇다.
그렇다면 계층이 존재하도록 START WITH ~ CONNECT BY를 작성해보자.
START WITH ~ CONNECT BY 예시
SELECT
LEVEL lv,
ITEM_A,
ITRM_B
FROM ITEM
START WITH ITEM_B IS NULL
CONNECT BY PRIOR ITEM_A = ITEM_B;
lv |
ITEM_A |
ITEM_B |
1 |
A |
(NULL) |
2 |
A |
a |
3 |
A |
b |
4 |
B |
a |
5 |
C |
a |
6 |
C |
b |
7 |
C |
c |
위와같이 START WITH의 ITEM_B의 값이 NULL인 것부터 시작해서 나열 순서는 CONNECT BY PRIOR의 ITEM_A 부터 순서를 맞추고 그 이후 ITEM_B를 맞춘다. 쉽게 생각해서 이중FOR문 이해했다.
for(ITEM_A){
for(ITEM_B){
}
}