RECURSIVE CTE 문법 익히기

송용진·2025년 6월 17일

SQL

목록 보기
3/4

1️⃣ RECURSIVE CTE란?

•	일반 CTE + 재귀 기능
•	자기 자신을 반복 호출해서 계층적/트리구조 탐색
•	일반적으로 부모-자식 관계, 조직도, 폴더구조 등에서 사용
•	WITH RECURSIVE 키워드를 사용함

2️⃣ 기본 문법 구조

WITH RECURSIVE cte_name AS (
-- Anchor member (초기값)
SELECT ...

UNION ALL

-- Recursive member (반복)
SELECT ...
FROM cte_name
JOIN ...
ON ...
)
SELECT * FROM cte_name;

구성 요소 설명

3️⃣ 간단한 예시로 배우기

JOIN이 없는 아주 쉬운 예제 : 1부터 10까지 숫자 생성하기

WITH RECURSIVE numbers AS (
    -- Anchor member: 시작값 1
    SELECT 1 AS num

    UNION ALL

    -- Recursive member: 숫자를 1씩 증가
    SELECT num + 1
    FROM numbers
    WHERE num < 10
)
SELECT * FROM numbers;

결과

문제: 직원 테이블에서 부하직원 찾기

CREATE TABLE employees (
    id INT,
    name VARCHAR(50),
    manager_id INT
);

예제 데이터

id name manager_id
1 CEO NULL
2 A 1
3 B 1
4 C 2
5 D 2
6 E 3

RECURSIVE CTE 작성

WITH RECURSIVE employee_hierarchy AS (
    -- Anchor member: 최상위 관리자 찾기
    SELECT id, name, manager_id, 1 AS level
    FROM employees
    WHERE manager_id IS NULL

    UNION ALL

    -- Recursive member: 부하직원 찾기
    SELECT e.id, e.name, e.manager_id, eh.level + 1
    FROM employees e
    JOIN employee_hierarchy eh
    ON e.manager_id = eh.id
)
SELECT * FROM employee_hierarchy;

실행 결과

id name manager_id level
1 CEO NULL 1
2 A 1 2
3 B 1 2
4 C 2 3
5 D 2 3
6 E 3 3

4️⃣ 핵심 정리

•	Anchor → Recursive → Anchor → Recursive → … 반복
•	종료 조건은 명시적으로 적지 않아도, 
더 이상 JOIN이 안 되는 순간 자동 종료됨.
•	일반적으로 UNION ALL을 사용 (중복 걱정 없으므로).

5️⃣ 조심할 점

profile
개발자

0개의 댓글