계층형 질의와 셀프 조인
2023. 10. 25. 01:06ㆍBOOKS/SQL 전문가 가이드
계층형 질의와 셀프 조인
- 계층형 데이터 : 동일 테이블에 계층적으로 상위와 하위 데이터가 포함된 데이터
- 엔터티를 순환 관계 데이터 모델로 설계할 경우 계층형 데이터 발생
- 순환 관계 데이터 모델은 셀프 조인이나 계층형 질의로 조회 가능
셀프 조인
- 동일 테이블 간의 조인
- FROM절에 동일 테이블이 두번 이상 나타나며 식별을 위해 테이블 별칭을 사용해야 함
SELECT ALIAS1.칼럼명, ALIAS2.칼럼명, ...
FROM 테이블명 ALIAS1, 테이블명 ALIAS2
WHERE AlIAS2.칼럼명 = ALIAS1.칼럼명
- 상위 데이터에서 하위 데이터를 조회하면 순방향 전개
- 하위 데이터에서 상위 데이터를 조회하면 역방향 전개
계층형 질의
ORACLE 계층형 질의
SELECT ...
WHERE condition ...
START WITH condition ...
CONNECT BY [NOCYCLE] condition ...
[ORDER SIBLINGS BY column,column,...]
- START WITH : 계층 구조 전개의 시작 위치를 지정 ⇒ 루트 데이터 지정
- CONNECT BY : 다음에 전개될 자식 데이터 지정, 자식 데이터는 CONNECT BY절에 주어진 조건 만족해야함
- PRIOR : CONNECT BY절에 사용되며 현재 읽은 칼럼을 지정
(FK) = PRIOR (PK) : 순방향 전개 (PK) = PRIOR(FK) : 역방향 전개 - NOCYCLE : 데이터를 전개하면서 이미 나타났던 데이터가 다시 나타나는 것을 사이클이 발생했다고하는데 사이클이 발생한 데이터는 런타임 오류를 발생, NOCYCLE을 추가하면 오류 발생시키지 않고 사이클이 발생한 이후의 데이터를 전개하지 않음
- ORDER SIBLINGS BY : 형제 노드(동일 LEVEL) 에서 정렬 수행
- WHERE : 모든 전개를 수행한 후에 지정된 조건을 만족하는 데이터만 추출(필터링)
Oracle 계층형 질의에서 사용되는 가상 칼럼
가상 칼럼 | 설명 |
---|---|
LEVEL | 루트 데이터이면 1, 그 하위 데이터는 리프 데이터까지 1씩 증가 |
CONNECT_BY_ISLEAF | 리프 데이터이면 1, 아니면 0 |
CONNECT_BY_ISCYCLE | 자식을 갖는데 해당 데이터가 조상으로서 존재하면 1, 아니면 0 조상은 자신으로부터 루트까지의 경로에 존재하는 데이터 CYCLE 옵션을 사용했을 때만 사용가능 |
ORACLE 계층형 질의에서 사용되는 함수
함수 | 설명 |
---|---|
SYS_CONNECT_BY_PATH(칼럼, 경로분리자) | 루트 데이터부터 현재 전개할 데이터까지의 경로 표시 |
CONNECT_BY_ROOT 칼럼 | 현재 전개할 데이터의 루트 데이터 표시, 단항 연산자 |
'BOOKS > SQL 전문가 가이드' 카테고리의 다른 글
정규 표현식 (1) | 2023.10.25 |
---|---|
PIVOT절과 UNPIVOT절 (0) | 2023.10.25 |
Top N 쿼리 (1) | 2023.10.25 |
윈도우 함수 (0) | 2023.10.07 |
그룹 함수 (0) | 2023.10.07 |