• Home
  • About
    • DEOKHEE LEE photo

      DEOKHEE LEE

      Data science archive

    • Learn More
    • Email
    • Facebook
    • Instagram
    • Github
  • Posts
    • All Posts
    • All Categories
    • All Tags
  • Projects

[SQL] HIERARCHICAL SEARCH

21 Jul 2018

Reading time ~1 minute

계층검색

계층 검색의 필수 절은 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;


sql, hierarchicalsearch sql Share Tweet +1