오라클의 계층형 SQL은 부모-자식 관계가 존재하는 계층적 데이터를 조회할 때 사용되는 SQL 문법입니다.
일반적으로 CONNECT BY 절을 사용하여 계층적 관계를 정의하고, START WITH 절을 통해 루트 노드를 지정합니다.
기존의 SELECT문에 START WITH, CONNECT BY, ORDER SIBLINGS BY문을 결합한 구조이다.
다음은 계층형 SQL에서 사용하는 주요 문법을 정리한 표입니다.
| 문법 | 설명 |
|---|---|
START WITH |
계층 구조에서 루트 노드를 지정하는 구문 |
CONNECT BY PRIOR |
부모-자식 관계를 정의하는 구문 (PRIOR 키워드를 통해 부모와 자식의 관계를 설정) |
ORDER SIBLINGS BY |
형제 노드(동일LEVEL)사이에서 정렬을 수행한다. |
가상컬럼
| 문법 | 설명 |
|---|---|
LEVEL |
현재 행의 계층 레벨을 반환 (루트는 1부터 시작) |
SYS_CONNECT_BY_PATH |
루트부터 현재 노드까지의 경로를 문자열로 반환 |
CONNECT_BY_ISLEAF |
현재 노드가 리프(자식이 없는) 노드인지 여부를 반환 (1: 리프 노드, 0: 자식 있음) |
오라클의 계층형 SQL을 사용하면 부모-자식 관계가 있는 데이터를 쉽게 조회할 수 있습니다.
다음 기본 예제에서는 카테고리 테이블의 계층 구조를 출력합니다.
SELECT LEVEL, category_id, category_name, parent_category_id
FROM category
START WITH parent_category_id IS NULL
CONNECT BY PRIOR category_id = parent_category_id;