재귀적 CTE(Common Table Expression)

김응진·2024년 7월 29일
0

재귀적 CTE(Common Table Expression)는 SQL에서 자기 자신을 참조하여 재귀적으로 데이터를 처리할 수 있는 방법을 제공하는 기능입니다. 재귀적 CTE는 계층 구조의 데이터를 처리하거나 반복적인 데이터를 생성하는 데 유용합니다.

기본 구조
재귀적 CTE는 두 부분으로 구성됩니다:

앵커 멤버(Anchor Member): 기본 쿼리를 정의하며, 재귀적 CTE의 초기 데이터 집합을 만듭니다.
재귀 멤버(Recursive Member): CTE 자신을 참조하여 반복적으로 데이터를 생성합니다. 이 과정은 재귀가 종료 조건을 만족할 때까지 계속됩니다.

WITH RECURSIVE CTE_NAME AS (
    -- 앵커 멤버
    SELECT ...
    UNION ALL
    -- 재귀 멤버
    SELECT ...
    FROM CTE_NAME
    WHERE ...
)
SELECT * FROM CTE_NAME;

예제 1: 계층 구조 데이터
예를 들어, 직원 테이블에서 관리자를 기반으로 한 계층 구조를 찾는 경우:

WITH RECURSIVE EmployeeHierarchy AS (
    -- 앵커 멤버: 최상위 관리자 찾기
    SELECT EmployeeID, ManagerID, EmployeeName
    FROM Employees
    WHERE ManagerID IS NULL
    
    UNION ALL
    
    -- 재귀 멤버: 관리자 아래 직원 찾기
    SELECT e.EmployeeID, e.ManagerID, e.EmployeeName
    FROM Employees e
    INNER JOIN EmployeeHierarchy eh ON e.ManagerID = eh.EmployeeID
)
SELECT * FROM EmployeeHierarchy;

예제 2
숫자 1부터 10까지 생성하는 예제:

WITH RECURSIVE Numbers AS (
    -- 앵커 멤버: 숫자 1 생성
    SELECT 1 AS Number
    
    UNION ALL
    
    -- 재귀 멤버: 이전 숫자에 1을 더하여 다음 숫자 생성
    SELECT Number + 1
    FROM Numbers
    WHERE Number < 10
)
SELECT * FROM Numbers;

주의사항
무한 루프 방지: 종료 조건을 명확히 지정하지 않으면 무한 루프에 빠질 수 있습니다. 종료 조건을 반드시 설정하세요.
성능: 재귀적 CTE는 성능에 영향을 줄 수 있으므로, 최적화된 쿼리 작성이 필요합니다.
지원 여부: 모든 데이터베이스 시스템이 재귀적 CTE를 지원하는 것은 아닙니다. 사용하는 DBMS의 문서를 참고하세요.

재귀적 CTE는 복잡한 계층 구조 데이터를 처리하거나 반복적인 계산을 수행하는 데 매우 유용한 도구입니다. 이를 잘 활용하면 SQL 쿼리를 더욱 효율적이고 강력하게 만들 수 있습니다.

profile
Developer

0개의 댓글