계층 순회 읽기

루트 한 행을 고르면, Oracle이 부모에서 자식 방향으로 계속 내려갑니다

이 쿼리의 핵심은 문법 이름보다 어디서 시작하고, 어떤 관계를 반복하며, 그 결과에 무슨 정보를 붙이는가입니다.

트리를 어떻게 걷는가

`START WITH`가 루트를 고르고, `CONNECT BY PRIOR`가 다음 자식을 찾습니다

`manager_id IS NULL`인 CEO에서 시작한 뒤, 부모 `emp_id`와 자식 `manager_id`가 맞는 행으로 계속 확장합니다.

PRIOR emp_id = manager_id는 현재 부모 행의 키를 다음 자식 행의 부모 키와 맞추라는 뜻입니다. 그래서 계층을 한 단계씩 내려가며 전체 조직도를 펼칠 수 있습니다.
각 행에 붙는 결과

순회만 하는 것이 아니라, 깊이와 경로도 함께 반환합니다

SELECT 절은 계층을 읽기 좋은 텍스트와 운영에 유용한 메타데이터로 바꿔 줍니다.

LPAD(... ) || name
들여쓴 조직도 텍스트 `LEVEL`만큼 공백을 넣어 결과를 트리처럼 보이게 만듭니다.
LEVEL
현재 깊이 루트는 1, 자식은 2, 손자식은 3처럼 몇 단계 내려왔는지 바로 확인합니다.
SYS_CONNECT_BY_PATH(name, '/')
루트부터의 전체 경로 현재 행이 조직도 어디에 있는지 문자열 하나로 추적할 수 있습니다.
결과 예시
org_chart   LEVEL  path
CEO         1      /CEO
  CFO       2      /CEO/CFO
  CTO       2      /CEO/CTO
    Dev A   3      /CEO/CTO/Dev A