Recursive CTE

시작 집합을 만든 뒤, 방금 찾은 행으로 다음 레벨을 계속 확장한다

재귀 CTE의 핵심은 한 번에 전체 트리를 읽는 것이 아니라, 직전 결과를 입력으로 삼아 다음 행을 찾고 그 결과를 모두 누적하는 구조입니다.

쿼리 뼈대
WITH RECURSIVE cte_name AS (
  SELECT ...          -- 시작점
  UNION ALL
  SELECT ...
  FROM table JOIN cte_name
       ON 재귀_조건    -- 다음 레벨 확장
)
SELECT * FROM cte_name;
Anchor member

최상위 직원, 루트 카테고리처럼 재귀의 출발점이 되는 행을 먼저 만든다.

Recursive member

방금 나온 결과를 다시 조인해 자식 행, 하위 카테고리, 다음 부품을 이어서 찾는다.

종료 조건

새로 추가되는 행이 없으면 확장이 멈추고, 지금까지 만든 모든 행이 최종 결과가 된다.

실행과 누적
1회차
Anchor 실행

시작 조건에 맞는 행만 선택해 첫 집합을 만든다.

R0
2회차
R0를 입력으로 확장

R0에 연결된 다음 레벨을 찾아 새 집합을 만든다.

R0 → R1
3회차+
직전 결과를 계속 재사용

R1, R2 ... 를 차례로 넣으며 더 깊은 레벨로 내려간다.

R1 → R2
종료
빈 결과가 나오면 중단

더 이상 자식이 없으면 반복을 멈추고 누적 결과만 남긴다.

R(n) = ∅
최종 반환값은 마지막 1회가 아니라 전체 합집합
R0 ∪ R1 ∪ R2 ∪ ... ∪ R(n-1)

그래서 조직도나 카테고리 트리처럼 부모에서 시작해 여러 단계로 이어지는 계층 구조를 한 쿼리로 순차 탐색할 수 있습니다.