-계층형데이터가 존재하는 경우 데이터를 조회하기 위해 계층형 질의를 사용
계층형 데이터란 동일 테이블에 계층적으로 상위와 하위 데이터가 포함된 데이터를 말함
1. ORACLE 계층형 질의
- START WITH 절 : 계층구조 전개의 시작 위치를 지정하는 구문(즉 루트데이터를 지정함)
- CONNECT BY 절 : 다음에 전개될 자식 데이터를 지정하는 구문
- PRIOR 절 : CONNECT BY절에 사용되며, 현재 읽은 칼럼을 지정
PRIOR 자식=부모 (부모-->자식) 방향으로 전개
PRIOR 부모=자식 (자식-->부모) 방향으로 전개
- NOCYCLE : 데이터를 전개하면서 이전에 나타났던 데이터가 나타나면 사이클이 형성되었다라고 하며,
사이클이 발생한 데이터는 런타임 오류가 발생.
그렇지만 NOCYCLE를 추가하면 사이클이 발생한 이후의 데이터는 전개하지 않는다.
- ORDER BY SIBLINGS BY : 형제 노드(동일 LEVEL) 사이에서 정렬을 수행
- WHERE : 모든 전개를 수행한 후에 지정된 조건을 만족하는 데이터만을 추출
- LEVEL : 루트데이터면 1, 하위데이터면 2, 리프데이터까지 1씩 증가
- CONNECT_BY_ISLEAF : 전개 과정에서 해당 데이터가 리프 데이터면 1 그렇지 않으면 0
- CONNECT_BY_ISCYCLE : 전개과정에서 자식을 갖는데 해당데이터에 조상을 갖으면 1 , 없다면 0
조상이랑 자신으로부터 루트까지의 경로에 존재하는 데이터
(CYCLE 옵션을 사용할 때만 사용가능)
- CONNECT_BY_ROOT : 현재 전개할 데이터의 루트 데이터를 표시(단항연산자)
- SYS_CONNECT_BY_PATH : 루트 데이터부터 현재 전개할 데이터까지의 경로 표시
SYS_CONNECT_BY_PATH(칼럼,경로분리자)
2. MS-SQL 계층형 질의
- MS-SQL 계층적 데이터를 가진 데이터는 계층적 질의 함수 지원안됨.
- WITH 절 UNION ALL을 사용하여 재귀적 호출을 이용해 계층적 질의가능함.
'SQL' 카테고리의 다른 글
테이블 Prefech & 인덱스 Prefetch (0) | 2022.01.16 |
---|---|
[그룹함수 / ROLLUP] (0) | 2021.12.29 |
집합 연산자 (SET OPERATOR) (0) | 2021.12.20 |
OUTER JOIN (0) | 2021.12.19 |
INNER & NATURAL JOIN (0) | 2021.12.18 |