● 계층형 질의
- 하나의 테이블 내 각 행끼리 관계를 가질 때, 연결고리를 통해 행과 행 사이의 계층(depth)을 표현하는 기법
ex)DEPT2 에서의 부서별 상하관계
- PRIOR 의 위치에 따라 연결하는 데이터가 달라짐
** 문법
** START WITH : 데이터를 출력할 시작 지정하는 조건
** CONNECT BY PRIOR : 행을 이어나갈 조건
** NOCYCLE : 순환이 발생하면 무한 루프가 될 수 있기 때문에 이를 방지하고자 사용
예제) DEPT2 테이블에 대해 각 부서의 레벨을 출력(최상위 부서가 1레벨)
** 올바른 예
☞ 사장실의 DCODE 를 넘겨 다시 각 행들의 PDEPT 와 비교해야 하므로 먼저 정해져야 하는 값의 방향에
PRIOR 전달!
** 잘못된 예
예제) 계층형 질의 조건 전달
CASE1) CONNECT BY 절에 전달 : 연결 조건이 추가되었으므로 모든 조건이 만족할 경우만 하위 레벨로 연결됨
CASE2) WHERE 절에 전달 : 모든 출력 결과 중 '서울지사' 데이터만 출력됨
※ 계층형 질의 가상 컬럼
1) LEVEL : 각 DEPTH 를 표현(시작점부터 1)
2) CONNECT_BY_ISLEAF : LEAF NODE(최하위노드) 여부(참:1, 거짓:0)
※ 계층형 질의 가상 함수
1) CONNECT_BY_ROOT 컬럼명 : 루트노드의 해당하는 컬럼값
2) SYS_CONNECT_BY_PATH(컬럼, 구분자) : 이어지는 경로 출력
3) ORDER SIBLINGS BY 컬럼 : 같은 LEVEL 일 경우 정렬 수행
4) CONNECT_BY_ISCYCLE : 계층형 쿼리의 결과에서 순환이 발생했는지 여부
예제) 계층형 질의절 가상 컬럼 및 함수의 사용
☞ ORDER SIBLINGS BY 를 사용하여 같은 레벨일 경우 DNAME 오름차순으로 정렬,
2 레벨은 자연과학부 < 컴퓨터공학부 순서대로 출력되며,
자연과학부 내 3레벨은 수학과 < 통계학과 < 화학공학과 순서대로 리턴되었음
예제) NOCYCLE 옵션
< EMPLOYEES DATA>
< NOCYCLE 옵션 없이 -ERROR 발생>
☞ 1000번 직원의 매니저는 2000번 사원인데, 2000번 사원도 1000번 직원이 매니저이므로 서로 순환구조를
가짐 이런 관계에서 NOCYCLE 없이는 에러가 발생함
< NOCYCLE 옵션 수행 시 - 정상 출력 >