계층형 질의
- 하나의 테이블 내 각 행끼리 관계를 가질 때, 연결고리를 통해 행과 행 사이의 계층 (depth)을 표현하는 기법
- 예) DEPT2에서의 부서별 상하관계
- PRIOR의 위치에 따라 연결하는 데이터가 달라짐
** 문법
- START WITH : 데이터를 출력할 시작 지정하는 조건
- CONNECT BY PRIOR : 행을 이어나갈 조건
- NOCYCLE : 순환이 발생하면 무한 루프가 될 수 있기 때문에 이를 방지하고자 사용
예1) DEPT2 테이블에 대해 각 부서의 레벨을 출력 (최상위 부서가 1 레벨)
잘못된 예) PRIOR 잘못 지정 시 아무것도 출력되지 않음!
예2) 계층형 질의 조건 전달
CASE1) CONNECT BY 절에 전달 : 연결 조건이 추가되었으므로 모든 조건이 만족할 경우만 하위 레벨로 연결됨
CASE2) WHERE 절에 전달 : 모든 출력 결과 중 '서울지사' 데이터만 출력됨
- 이미 하위레벨을 다 정한 뒤에 데이터 필터링
- CONNECT BY에 전달했을 때는 연결 조건이므로 ROOT 행이 출력되지만, WHERE 절에 전달한 경우 '서울지사'인 것만 출력
- ROOT행이 '서울지사'가 아니라면 출력 X
계층형 질의 가상 컬럼
- LEVEL : 각 DEPTH를 표현 (시작점부터 1)
- CONNECT_BY_ISLEAF : LEAF NODE (최하위노드) 여부 (참 : 1, 거짓 : 0)
계층형 질의 가상 함수
- CONNECT_BY_ROOT 컬럼명 : 루트노드의 해당하는 컬럼 값
- SYS_CONNECT_BY_PATH(컬럼, 구분자) : 이어지는 경로 출력
- ORDER SIBLINGS BY 컬럼 : 같은 LEVEL의 경우 정렬 수행
- CONNECT_BY_ISCYCLE : 계층형 쿼리의 결과에서 순환이 발생했는지 여부
예1) 계층형 질의절 가상 컬럼 및 함수의 사용
예2) NOCYCLE 옵션
<EMPLOYEES DATA>
NOCYCLE 옵션 없이 - ERROR 발생)
- 1000번 직원의 매니저는 2000번 직원, 2000번 직원의 매니저는 1000번 직원 → 사이클 발생
NOCYCLE 옵션 수행)
- 정상 출력됨
'sqld' 카테고리의 다른 글
2-16) 정규 표현식 (0) | 2024.08.22 |
---|---|
2-15) PIVOT과 UNPIVOT (0) | 2024.08.22 |
2-13) TOP N QUERY (0) | 2024.08.22 |
2-12) 윈도우 함수 (0) | 2024.08.22 |
2-11) 그룹 함수 (0) | 2024.08.21 |