재귀 CTE의 핵심은 한 번에 전체 트리를 읽는 것이 아니라, 직전 결과를 입력으로 삼아 다음 행을 찾고 그 결과를 모두 누적하는 구조입니다.
WITH RECURSIVE cte_name AS (
SELECT ... -- 시작점
UNION ALL
SELECT ...
FROM table JOIN cte_name
ON 재귀_조건 -- 다음 레벨 확장
)
SELECT * FROM cte_name;
최상위 직원, 루트 카테고리처럼 재귀의 출발점이 되는 행을 먼저 만든다.
방금 나온 결과를 다시 조인해 자식 행, 하위 카테고리, 다음 부품을 이어서 찾는다.
새로 추가되는 행이 없으면 확장이 멈추고, 지금까지 만든 모든 행이 최종 결과가 된다.
시작 조건에 맞는 행만 선택해 첫 집합을 만든다.
R0에 연결된 다음 레벨을 찾아 새 집합을 만든다.
R1, R2 ... 를 차례로 넣으며 더 깊은 레벨로 내려간다.
더 이상 자식이 없으면 반복을 멈추고 누적 결과만 남긴다.
그래서 조직도나 카테고리 트리처럼 부모에서 시작해 여러 단계로 이어지는 계층 구조를 한 쿼리로 순차 탐색할 수 있습니다.