알고리즘/SQL
[SQL] 재귀 CTE(Command Table Expression)를 이용한 계층적 구조 탐색
moongi
2025. 5. 9. 19:14
728x90
반응형
SQL에서의 재귀(WITH RECURSIVE)
주로 계층 구조, 예를 들어 조직도, 카테고리 트리, 댓글 트리 등을 탐색할 때 사용된다.
✅ 예시 테이블: employees
employee_id | name | manager_id |
1 | CEO | NULL |
2 | ManagerA | 1 |
3 | ManagerB | 1 |
4 | StaffA1 | 2 |
5 | StaffA2 | 2 |
6 | StaffB1 | 3 |
✅ 목표
- CEO부터 시작해서, 각 직원이 누구 밑에 있는지를 계층적으로 출력
- 그리고 각 직원의 레벨(깊이) 도 함께 보여줌
WITH RECURSIVE ORG_CHART AS (
-- 1단계: 루트 직원(CEO)을 가져온다.
SELECT
EMPLOYEE_ID,
NAME,
MANAGER_ID,
1 AS LEVEL
FROM EMPLOYEES
WHERE MANAGER_ID IS NULL
UNION ALL
-- 2단계 이상: 자기 자신을 재귀적으로 연결한다.
SELECT
E.EMPLOYEE_ID,
E.NAME,
E.MANAGER_ID,
OC.LEVEL + 1 AS LEVEL
FROM EMPLOYEES E
JOIN ORG_CHART OC ON E.MANAGER_ID = OC.EMPLOYEE_ID
)
SELECT * FROM ORG_CHART
ORDER BY LEVEL, MANAGER_ID, EMPLOYEE_ID;
✅ 결과
employee_id | name | manager_id | level |
1 | CEO | NULL | 1 |
2 | ManagerA | 1 | 2 |
3 | ManagerB | 1 | 2 |
4 | StaffA1 | 2 | 3 |
5 | StaffA2 | 2 | 3 |
6 | StaffB1 | 3 | 3 |
참고할만한 문제
[SQL] 입양 시각 구하기 (2)
https://school.programmers.co.kr/learn/courses/30/lessons/59413#qna 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 해당 문제는 Recursive
moon-code.tistory.com
728x90
반응형