계층형 질의란 테이블에 계층형 데이터가 존재하는 경우 데이터를 조회하기 위한 구문이다.
계층형 데이터는 동일 테이블에 상위와 하위 데이터가 포함된 데이터를 뜻하고, 엔티티를 순환관계 모델로 설계하는 경우 발생한다.
계층형 질의 사용 방법
쿼리구문 | 설명 |
---|---|
START WITH | 계층구조 전개의 시작 위치를 지정하는 구문이다. 루트 데이터를 지정한다. |
CONNECT BY | 다음에 전개될 자식 데이터를 지정한다. 자식 데이터는 CONNECT BY 절에 주어진 조건을 만족해야한다.(JOIN) |
PRIOR | CONNECT BY 절에 사용되며 현재 읽은 칼럼을 지정한다. |
PRIOR 자식 | 부모형태를 사용하면 계층구조에서 부모 -> 자식 방향으로 순방향 전개 |
PRIOR 부모 | 자식 형태를 사용하면 자식 -> 부모 방향으로 역방향 전개 |
NOCYCLE | 데이터를 전개하면서 이미 나타났던 동일한 데이터가 전개중에 다시 나타나는 경우 CYCLE이 생성되어 무한루프에 빠진다. NOCYCLE 구문을 사용하면 CYCLE이 발생하는 경우 이후 데이터 전개를 방지한다.ㅣ |
ORDER SIBLINGS BY | 형제노드(동일 LEVEL) 사이 데이터 정렬 |
WHERE | 모든 전개를 수행한 뒤 지정조건을 통해 데이터 필터링 |
계층형 질의 가상 컬럼
이름 | 설명 |
---|---|
LEVEL | 루트데이터이면 1, 그보다 하위 데이터이면 2를 반환하며 리프노드까지 1씩 증가 *MAX(LEVEL)은 리프노드를 반환 |
CONNECT_BY_LEAF | 전개 과정에서 리프데이터이면 1, 그렇지 않으면 0을 반환 |
CONNECT_BY_CYCLE | 전개 과정에서 자식을 갖는데 해당 데이터가 조상으로 존재하면 1을 반환, 그렇지 않으면 0을 반환 |
계층형 질의 함수
이름 | 설명 |
---|---|
SYS_CONNECT_BY_PATH | 루트데이터부터 현재 전개할 데이터까지의 경로를 표시 |
(SYS_CONNECT_BY_PATH(칼럼명, 경로 분리자)) | |
CONNECT_BY_ROOT | 현재 전개할 데이터의 루트 데이터를 표시(단항 연산자) |
(CONNECT_BY_ROOT(칼럼)) |