계층 구조 탐색
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이 일치하는 항목을 찾지 못하면) 재귀가 자연스럽게 중지됩니다.
챌린지
중급사용 가능한 테이블 및 열:
categories:id,name,parent_id
각 category에는 다른 category를 가리키는 선택적 parent_id가 있습니다. category id = 1의 후손(자식, 손자 등)에 해당하는 모든 category를 반환하되, category 1 자체는 제외합니다. id와 name을 반환하고, id를 기준으로 정렬합니다.
직접 해보기
WITH RECURSIVE descendants AS (
-- 앵커: id 1의 직접 자식들
-- 재귀: 그들의 자식들 등
)
SELECT id, name FROM descendants ORDER BY id
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
심화 과정의 모든 레슨
직접 연습해 보세요: SQL 플레이그라운드