[DATABASE] 계층형 질의란? START WITH, CONNECT BY, PRIOR, ORDER SIBLINGS BY 란?
계층형 질의
테이블에 계층형 데이터가 존재하는 경우 데이터를 조회하기 위해서 계층형 질의를 사용합니다.
계층형 데이터란 동일 테이블에 계층적으로 상위와 하위 데이터가 포함된 데이터를 말합니다.
ORACLE 의 계층형 질의
계층형 질의 문법
SELECT FROM 테이블 WHERE condition AND condition ... START WITH condition CONNECT BY [NOCYCLE] condition AND condition ... [ORDER SIBLING BY column, column ...]
문법의 의미
구문 |
의미 |
START WITH |
계층 구조 전개의 시작 위치를 지정하는 구문이다. 루트 데이터를 지정이다. |
CONNECT BY |
다음에 전개될 자식 데이터를 지정하는 구문이다. 자식 데이터는 CONNECT BY 절에 주어진 조건을 만족해야 한다. |
PRIOR |
CONNECT BY 절에 사용되며, 현재 읽은 컬럼을 지정한다. PRIOR 자식 = 부모 형태를 사용하면 계층구조에서 부모 데이터에서 자식 데이터 방향으로 전개하는 순방향 전개를 한다. |
NOCYCLE |
데이터를 전개하면서 이미 나타났던 동일한 데이터가 전개 중에 다시 나타나면 이것을 사이클이라고 말하며, NOCYCLE 은 사이클이 발생한 이후의 데이터는 전개하지 않는다. |
ORDER SIBLINGS BY |
형제 노드 사이에서 정렬을 수행한다. |
WHERE | 모든 전개를 수행한 후에 지정된 조건을 만족하는 데이터만 추출한다. |
계층형 질의에서 사용되는 가상 컬럼
가상 컬럼 |
설명 |
LEVEL |
루트 데이터이면 1, 그 하위 데이터이면 2 이다. 리프 데이터까지 1씩 증가한다. |
CONNECT_BY_ISLEAF |
전개 과정에서 해당 데이터가 리프 데이터이면 1, 그렇지 않으면 0 이다. |
CONNECT_BY_ISCYCLE |
전개 과정에서 자식을 갖는데, 해당 데이터가 조상으로서 존재하면 1, 그렇지 않으면 0 이다. 여기서 조상이란 자신으로부터 루트까지의 경로에 존재하는 데이터를 말한다. |
계층형 질의에서 사용되는 함수
함수 |
설명 |
SYS_CONNECT_BY_PATH |
루트 데이터부터 현재 전개할 데이터까지의 경로를 표시한다. |
CONNECT_BY_ROOT |
현재 전개할 데이터의 루트 데이터를 표시한다. |
계층형 질의 예제
SELECT CONNECT_BY_ROOT(EMPNO) 루트사원, SYS_CONNECT_BY_PATH(EMPNO, '\') 경로, EMPNO 사원, MGR 관리자 FROM EMP START WITH MGR IS NULL CONNECT BY PRIOR EMPNO = MGR;
MS-SQL 은 완전 다른문법이지만 다음번에 다루기로 해봅니다.
이 내용은 'SQL 전문가 가이드, 한국데이터베이스 진흥원' 에서 공부한 내용입니다.