본문 바로가기

개발/Database

계층형 질의(Hierarchical Query)

1. 계층형 데이터

테이블에 계층형 데이터가 존재하는 경우 데이터를 조회하기 위해서 계층형 질의를 사용.

계층형 데이터란 동일 테이블에 계층적으로 상위와 하위 데이터가 포함된 데이터를 의미.

 

2. ORACLE 계층형 질의

SELECT ... 

FROM [TABLE_NAME]

WHERE condition AND condition ...

START WITH condition

CONNECT BY [NOCYCLE] condition AND condition ...

[ORDER SIBLINGS BY column, column, ...]

 

- START WITH : 계층 구조 전개 시작 위치를 지정

- CONNECT BY : 자식 데이터 지정, CONNECT BY 의 조건을 만족해야 함

- PRIOR : CONNECT BY 절에 사용되며 현재 읽은 컬럼을 지정,

PRIOR 자식 = 부모 형태는 순방향으로 부모 > 자식의 방향

PRIOR 부모 = 자식 형태는 역방향으로 자식 > 부모의 방향

- NOCYCLE : 데이터를 전개하면서 이미 나타났던 동일한 데이터가 전개 중에 다시 나타나면 이것을 가리켜 사이클이 형성되엇다고 하며 사이클이 발생한 데이터는 런타임 오류가 발생

NOCYCLE 추가 시 사이클 발생 이후의 데이터를 전개하지 않음

- ORDER SIBLING BY : 형제 노드 사이에서 정렬 수행

- WHERE : 모든 전개 수행 후 조건 만족 데이터를 추출

 

계층형 질의에서 사용되는 가상컬럼

- LEVEL : 루트 데이터면 1, 그 하위 데이터는 2, 리프 데이터까지 1씩 증가

- CONNECT_BY_ISLEAF : 전개 과정에서 해당 데이터가 리프 데이터이면 1, 그렇지 않으면 0

- CONNECT_BY_ISCYCLE : 전개 과정에서 자식의 데이터가 조상으로 존재하면 1, 그렇지 않으면 0

CYCLE 옵션 사용시에만 사용 가능

 

반응형

'개발 > Database' 카테고리의 다른 글

CTE(Common Table Expressions)  (0) 2020.08.17
ANSI SQL, Transact-SQL(T-SQL)  (0) 2020.08.16
ORM(Object Relational Mapping)  (0) 2020.06.13
데이터베이스 정규화, 반정규화  (0) 2020.06.05
Index  (0) 2020.06.05