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
반응형
'알고리즘 > SQL' 카테고리의 다른 글
[SQL] 노선별 평균 역 사이 거리 조회하기 (1) | 2025.06.09 |
---|---|
[SQL] 조건에 맞는 사원 정보 조회하기 (0) | 2025.05.16 |
[SQL] 입양 시각 구하기 (2) (0) | 2025.05.09 |
[SQL] 년, 월, 성별 별 상품 구매 회원 수 구하기 (0) | 2025.05.09 |
[SQL] 저자 별 카테고리 별 매출액 집계하기 (0) | 2025.05.08 |