계층형 쿼리
1 2 3 4 5 | SELECT EXPR1, EXPR2 FROM 테이블 WHERE 조건 START WITH [최상위 조건] CONNECT BY [NOCYCLE] [PRIOR 계층형 구조 조건]; | cs |
START WITH 조건
계층형 구조에서 최상위 계층의 로우를 식별하는 조건을 명시한다.
CONNECT BY 조건
계층형 구조가 어떤 식으로 연결되는지를 기술. PRIOR는 계층형 쿼리에서만 사용할 수 있는 연산
계층형 쿼리의 내부적 처리절차
1. 조인
2. START WITH절의 최상위 계층 로우를 선택
3. CONNECT BY절의 구문에 따라 계층형 관계를 파악, 자식 로우 선택.
4. 조인을 제외한 WHERE 조건에 해당하지 않는 로우를 걸러냄.
예제
1 2 3 4 5 6 | SELECT DEPARTMENT_ID , LPAD(' ', 3 * (LEVEL-1)) || DEPARTMENT_NAME , LEVEL FROM DEPARTMENTS START WITH PARENT_ID IS NULL CONNECT BY PRIOR DEPARTMENT_ID = PARENT_ID; | cs |
SIBLINGS BY
레벨이 같은 형제 로우에 한해서 정렬한다.
1 2 3 4 5 6 7 | SELECT DEPARTMENT_ID , LPAD(' ', 3 * (LEVEL-1)) || DEPARTMENT_NAME , LEVEL FROM DEPARTMENTS START WITH PARENT_ID IS NULL CONNECT BY PRIOR DEPARTMENT_ID = PARENT_ID ORDER SIBLINGS BY DEPARTMENT_NAME; | cs |
CONNECT_BY_ROOT
최상위 로우를 반환하는 연산자
1 2 3 4 5 6 7 | SELECT DEPARTMENT_ID , LPAD(' ', 3 * (LEVEL-1)) || DEPARTMENT_NAME , LEVEL , CONNECT_BY_ROOT DEPARTMENT_NAME AS ROOT_NAME FROM DEPARTMENTS START WITH PARENT_ID IS NULL CONNECT BY PRIOR DEPARTMENT_ID = PARENT_ID; | cs |
SYS_CONNECT_BY_PATH
루트 노드에서 시작해 자신의 행까지 연결된 경로 정보를 반환하는 함수이다. 구분자에는 컬럼값에 포함된 문자가 올 수 없다.
1 2 3 4 5 6 7 | SELECT DEPARTMENT_ID , LPAD(' ', 3 * (LEVEL-1)) || DEPARTMENT_NAME , LEVEL , SYS_CONNECT_BY_PATH(DEPARTMENT_NAME, ' > ') FROM DEPARTMENTS START WITH PARENT_ID IS NULL CONNECT BY PRIOR DEPARTMENT_ID = PARENT_ID; | cs |
CONNECT_BY_ISCYCLE
현재 로우가 자식을 갖고있는데 동시에 그 자식 로우가 부모 로우이면 1을, 그렇지 않으면 0을 반환하는 의사컬럼
1 2 3 4 5 6 7 8 | SELECT DEPARTMENT_ID , LPAD(' ', 3 * (LEVEL-1)) || DEPARTMENT_NAME , LEVEL , CONNECT_BY_ISCYCLE ISLOOP , PARENT_ID FROM DEPARTMENTS START WITH DEPARTMENT_ID = 10 CONNECT BY NOCYCLE PRIOR DEPARTMENT_ID = PARENT_ID; | cs |
CONNECT_BY_ISLELF
해당 로우가 최하위 자식로우일 때 1을, 그렇지 않으면 0을 반환하는 의사컬럼
1 2 3 4 5 6 7 | SELECT DEPARTMENT_ID , LPAD(' ', 3 * (LEVEL-1)) || DEPARTMENT_NAME , LEVEL , CONNECT_BY_ISLEAF FROM DEPARTMENTS START WITH PARENT_ID IS NULL CONNECT BY PRIOR DEPARTMENT_ID = PARENT_ID; | cs |
반응형
'📃 DATABASE > ORACLE' 카테고리의 다른 글
[SQL] 분석 함수 (0) | 2018.01.15 |
---|---|
[SQL] WITH절과 순환 서브쿼리 (0) | 2018.01.15 |
[SQL] 내부조인과 외부조인 (0) | 2018.01.08 |
[SQL] 집합 연산자 (0) | 2018.01.04 |
[SQL] 데이터베이스 객체_시노님(SYNONYM) (2) | 2017.11.11 |