계층형 질의
테이블에 계층형 데이터가 존재하는 경우 데이터를 조회하기 위해서 계층형 질의를 사용합니다.
계층형 데이터란 동일 테이블에 계층적으로 상위와 하위 데이터가 포함된 데이터를 말합니다.
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 전문가 가이드, 한국데이터베이스 진흥원' 에서 공부한 내용입니다.
'Database > 개념' 카테고리의 다른 글
[DATABASE] 그룹함수란? ROLLUP, CUBE, GROUPING SETS 란? (1) | 2018.11.14 |
---|---|
[DATABASE] 서브쿼리란? 서브쿼리 사용해보기 (0) | 2018.11.13 |
[DATABASE] 집합 연산자란? UNION, UNION ALL, INTERSECT, EXCEPT 란? (0) | 2018.11.12 |
[DATABASE] 조인 수행 원리란? NL, Sort Merge, Hash 조인이란? (0) | 2018.11.02 |
[DATABASE] 인덱스란? 트리기반 인덱스, 클러스터형 인덱스, 테이블 스캔, 인덱스 스캔이란? (0) | 2018.11.02 |