Language/MySQL
재귀 함수
Mesut Özil
2024. 1. 4. 22:43
재귀 함수
RECURSIVE 키워드는 SQL에서 재귀적인 쿼리를 작성할 때 사용됩니다.
RECURSIVE 쿼리는 특정 데이터 구조의 계층 구조를 탐색하거나,
자기 자신을 참조하는 데이터를 다룰 때 유용한 기능을 제공합니다.
예를 들어, 조직도나 카테고리 트리와 같은 계층 구조를 가진 데이터를 쿼리할 때 사용할 수 있습니다.
다음은 간단한 예시를 통해 RECURSIVE를 설명하겠습니다.
# organizations table
+----------------+----------------+------------------------+
| department_id | department_name| parent_department_id |
+----------------+----------------+------------------------+
| 1 | Headquarters | NULL |
| 2 | Engineering | 1 |
| 3 | Marketing | 1 |
| 4 | Development | 2 |
| 5 | Testing | 2 |
| 6 | Sales | 3 |
+----------------+----------------+------------------------+
WITH RECURSIVE OrganizationHierarchy AS (
SELECT department_id, department_name, parent_department_id, 1 as level
FROM organizations
WHERE parent_department_id IS NULL
UNION ALL
SELECT o.department_id, o.department_name, o.parent_department_id, oh.level + 1
FROM organizations o
JOIN OrganizationHierarchy oh ON o.parent_department_id = oh.department_id
)
SELECT * FROM OrganizationHierarchy
ORDER BY department_id;
이 쿼리는 organizations 테이블에서 재귀적으로 부서-상위 부서 관계를 조회합니다.
OrganizationHierarchy라는 재귀적 CTE(Common Table Expression)를 정의합니다.
초기 단계에서는 상위 부서가 없는 부서를 선택하고,
WHERE parent_department_id IS NULL 조건을 통해 최상위 부서를 찾습니다.
UNION ALL을 사용하여 계속해서 부서-상위 부서 관계를 찾아내는 방식으로 쿼리가 구성됩니다.
# 결과
+----------------+----------------+------------------------+-------+
| department_id | department_name| parent_department_id | level |
+----------------+----------------+------------------------+-------+
| 1 | Headquarters | NULL | 1 |
| 2 | Engineering | 1 | 2 |
| 3 | Marketing | 1 | 2 |
| 4 | Development | 2 | 3 |
| 5 | Testing | 2 | 3 |
| 6 | Sales | 3 | 3 |
+----------------+----------------+------------------------+-------+
본 게시글은 ChatGPT의 도움을 받아 작성하였습니다.