계층형 조회
- 계층형 조회는 Oracle DB에서 지원하는 것으로 계층형으로 데이터를 조회할 수 있다.
- 예를 들어 부장에서 차장, 차장에서 과장, 과장에서 대리, 대리에서 사원 순으로 트리 형태의 구조를 위에서 아래로 탐색하면서 조회하는 것이다.
물론 역방향도 조회가 가능하다.
- CONNECT BY는 트리(Tree) 형태의 구조로 질의를 수행하는 것으로 START WITH 구는 시작 조건을 의미하고 CONNECT BY PRIOR 는 조인 조건이다.
Root 노드로부터 하위 노드의 질의를 실행한다.
- 계층형 조회에서 MAX(LEVEL)을 사용하여 최대 계층 수를 구할 수 있다.
즉, 계층형 구조에서 마지막 Leaf Node의 계층값을 구한다.
최대 계층값 출력
SELECT
MAX(LEVEL)
FROM Limbest.EMP
START WITH MGR IS NULL
CONNECT BY PRIOR EMPNO = MGR;
-> 결과 값 : 4
- 위의 SQL에서 MAX(LEVEL)이 4이므로 최대 깊이는 4이다.
CONNECT BY 키워드
키워드 | 설명 |
---|
LEVEL | 검색 항목의 깊이를 의미한다. 즉, 계층구조에서 가장 상위 레벨이 1이 된다. |
CONNECT_BY_ROOT | 계층 구조에서 가장 최상위 값을 표시한다. |
CONNECT_BY_ISLEAF | 계층 구조에서 가장 최하위를 표시한다. |
SYS_CONNECT_BY_PATH | 계층 구조의 전체 전개 경로를 표시한다. |
NOCYCLE | 순환 구조가 발생지점까지만 전개된다. |
CONNECT_BY_ISCYCLE | 순환 구조 발생 지점을 표시한다. |
- CONNECT BY 구는 순방향 조회와 역방향 조회가 있다.
순방향 조회는 부모 엔터티로부터 자식 엔터티를 찾아가는 검색을 의미하고, 역방향 조회는 자식 엔터티로부터 부모 엔터티를 찾아가는 검색이다.
계층형 조회
키워드 | 설명 |
---|
START WITH 조건 | 계층 전개의 시작 위치를 지정하는 것이다. |
PRIOR 자식 = 부모 | 부모에서 자식방향으로 검색을 수행하는 순방향 전개이다. |
PRIOR 부모 = 자식 | 자식에서 부모방향으로 검색을 수행하는 역방향 전개이다. |
NOCYCLE | 데이터를 전개하면서 이미 조회된 데이터를 다시 조회되면 CYCLE이 형성된다. 이때 NOCYCLE은 사이클이 발생되지 않게 한다. |
Order siblings by 컬럼명 | 동일한 LEVEL인 형제노드 사이에서 정렬을 수행한다. |