핵심 인사이트 (3줄 요약)
- 본질: Self JOIN은 같은 테이블을 별칭(Alias)을 달리하여 자기 자신과 조인하는 것이고, Recursive CTE(Common Table Expression)는 WITH RECURSIVE로 계층·트리 구조를 재귀 탐색하는 SQL:1999 표준 문법이다.
- 가치: 조직도(직원-상사)·부품 BOM(Part-SubPart)·카테고리 계층 등 트리 구조 데이터를 SQL로 탐색하는 데 필수이며, Oracle의 CONNECT BY보다 Recursive CTE가 표준이다.
- 판단 포인트: 무한 루프 방지를 위해 MAX RECURSION DEPTH 설정이 필수이며, PostgreSQL·MySQL 8+·SQL Server 모두 지원한다.
Ⅰ. 개요 및 필요성
Recursive CTE:
WITH RECURSIVE org AS (
SELECT id, name, mgr_id FROM emp WHERE mgr_id IS NULL -- Anchor
UNION ALL
SELECT e.id, e.name, e.mgr_id FROM emp e JOIN org o ON e.mgr_id = o.id -- Recursive
) SELECT * FROM org;
- 📢 섹션 요약 비유: Recursive CTE는 가계도 탐색이다. 시조(Anchor)부터 시작하여 자손을 재귀적으로 찾는다.
Ⅱ~Ⅴ. 결론
Recursive CTE는 계층·그래프 데이터 탐색의 SQL 표준이며, CONNECT BY(Oracle 전용)를 대체한다.
📌 관련 개념 맵
| 개념 | 연결 포인트 |
|---|---|
| Self JOIN | 자기 참조 |
| Recursive CTE | 재귀 계층 탐색 |
| Anchor | 재귀 시작점 |
| CONNECT BY | Oracle 전용 (비표준) |
| BOM | 부품 계층 구조 |
📈 관련 키워드 및 발전 흐름도
[Self JOIN (기본)] → [CONNECT BY (Oracle, 1990s)]
→ [Recursive CTE (SQL:1999 표준)]
→ [Materialized Path / Nested Set (대안)]
→ [현재: Graph Query (Neo4j) — 복잡 계층 전용]
👶 어린이를 위한 3줄 비유 설명
- Self JOIN은 같은 가족사진에서 부모와 자식을 찾는 거예요.
- Recursive CTE는 가계도를 위에서 아래로 쭉 따라가는 거예요.
- 시조(할아버지)부터 시작해서 자손을 계속 찾아 내려가요!