SELECT 컬럼들
FROM 테이블
START WITH 루트조건
CONNECT BY PRIOR 부모컬럼 = 자식컬럼
[ORDER SIBLINGS BY 정렬기준컬럼];
구분
의미
START WITH
트리의 시작점(루트) 지정
CONNECT BY
부모-자식 연결 조건 지정
PRIOR
이전 행(부모 행)
ORDER SIBLINGS BY
같은 부모를 가진 형제끼리 정렬
1) SELECT 절에서 사용하는 계층형 키워드
키워드
의미
특징
LEVEL
현재 행의 깊이 (루트=1)
SELECT, WHERE, ORDER BY 사용 가능
CONNECT_BY_ROOT
최상위(루트) 값 반환
현재 행 기준으로 루트 추적
CONNECT_BY_ISLEAF
리프 노드 여부
1 = 자식 없음, 0 = 자식 있음
SYS_CONNECT_BY_PATH(컬럼명, char)
루트 → 현재까지 경로
char = 구분자
2) PRIOR 방향
방향
설명
조건
부모 → 자식
아래로 탐색
PRIOR 부모 = 자식
자식 → 부모
위로 탐색
PRIOR 자식 = 부모
EMP_ID
POSITION
PARENT_ID
1
사장
NULL
2
개발팀장
1
3
영업팀장
1
4
백엔드개발
2
5
프론트엔드
2
6
국내영업
3
7
해외영업
3
SELECT
LEVEL,
LPAD(' ', (LEVEL-1)*2) || POSITION AS POSITION_LEVEL, -- 들여쓰기
EMP_ID,
PARENT_ID,
SYS_CONNECT_BY_PATH(POSITION, '>') AS 전체경로
FROM emp
START WITH PARENT_ID IS NULL -- 루트 지정
CONNECT BY PRIOR EMP_ID = PARENT_ID -- 부모→자식 방향
ORDER SIBLINGS BY EMP_ID; -- 같은 레벨 정렬