계층검색
계층 검색의 필수 절은 START WITH
(시작점)과 CONNECT BY PRIOR
(연결고리, 다음은 누구를 연결할 것인가)이다.
TOP-DOWN 방식의 계층 검색
SELECT level, employee_id, last_name, manager_id
FROM employees
START WITH employee_id = 100
CONNECT BY PRIOR employee_id = manager_id;
--level은 계층을 표현
코드를 해석하면, employee_id 가 100 인 데이터를 시작(START WITH
)으로 전단계(CONNECT BY PRIOR
)의 employee_id 를 출력할 것이다. 즉, 선행되는 row의 값(employee_id = 100)을 만족(= manager_id)하는 row를 계속해서 찾는다.
BOTTOM-UP 방식의 계층 검색
SELECT level, employee_id, last_name, manager_id
FROM employees
START WITH employee_id = 109
CONNECT BY employee_id = PRIOR manager_id;
PRIOR의 위치는 바꿀 수 있다.
계층검색 시 출력 팁
시각적으로 간단히 확인하는 방법
lpad() 함수를 사용하여 출력 시 계층 구조를 시각적으로 볼 수 있음
SELECT level, lpad(' ',2*level-2,' ') || last_name
FROM employees
START WITH employee_id = 100
CONNECT BY PRIOR employee_id = manager_id;
계층을 이름순으로 정렬
SIBILINGS
를 사용하여 계층을 유지한 채 정렬할 수 있다.
SELECT level, lpad(' ',2*level-2,' ') || last_name
FROM employees
START WITH employee_id = 100
CONNECT BY PRIOR employee_id = manager_id
ORDER SIBLINGS BY last_name;