Menu
Coddy logo textTech

계층 구조 탐색

Coddy SQL 여정의 심화 과정 섹션에 포함된 레슨. 27개 중 21번째.

재귀적 CTE가 존재하는 진짜 이유는 단일 테이블에 저장된 parent/child 관계를 따라가는 것입니다. employees에 동일한 테이블을 가리키는 manager_id 열이 있다고 가정해 보겠습니다.

WITH RECURSIVE chain AS (
    SELECT id, name, manager_id
    FROM employees WHERE id = 7              -- 앵커: 시작 직원
    UNION ALL
    SELECT e.id, e.name, e.manager_id
    FROM employees e
    JOIN chain c ON e.id = c.manager_id      -- 재귀: 관리자로 점프
)
SELECT * FROM chain

각 단계는 CTE를 employees에 다시 조인하여 트리에서 한 단계 위로 이동합니다. 한 행에 manager가 없으면(JOIN이 일치하는 항목을 찾지 못하면) 재귀가 자연스럽게 중지됩니다.

challenge icon

챌린지

중급

사용 가능한 테이블 및 열:

  • categories: id, name, parent_id

각 category에는 다른 category를 가리키는 선택적 parent_id가 있습니다. category id = 1의 후손(자식, 손자 등)에 해당하는 모든 category를 반환하되, category 1 자체는 제외합니다. idname을 반환하고, id를 기준으로 정렬합니다.

직접 해보기

WITH RECURSIVE descendants AS (
    -- 앵커: id 1의 직접 자식들
    -- 재귀: 그들의 자식들 등
)
SELECT id, name FROM descendants ORDER BY id
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

심화 과정의 모든 레슨

직접 연습해 보세요: SQL 플레이그라운드