본문 바로가기
DataBase/MySQL

[MySQL] Common Table Expression (CTE)

by 제우제우 2024. 9. 12.

Common Table Expression

MySQL 8.XX 버전부터 사용이 가능한 Common Table Expression 즉 CTE는 복잡한 쿼리를 더 간단하고 

읽기 쉽게 작성하는 방법으로, 하나의 쿼리에서 재사용할 수 있는 임시 결과 집합을 정의하는 기능이다. 

CTE는 WITH 키워드를 사용하여 정의되며, 정의된 CTE는 쿼리 내에서 테이블처럼 사용된다. 

 

CTE 종류 

CTE는 크게 두 가지로 나눌 수 있다. 

1. 일반 CTE: 쿼리 실행 시 한 번만 평가되는 임시 결과 집합을 정의

2. 재귀적 CTE: 자기 자신을 참조하여 재귀적으로 데이터를 가져오는 CTE

 

CTE 예시

일반적인 CTE 예시 

WITH EmployeeCTE AS (
    SELECT id, name, department_id
    FROM employees
    WHERE department_id = 1
)
SELECT * 
FROM EmployeeCTE;

 

 

재귀적 CTE 예시

WITH RECURSIVE EmployeeHierarchy AS (
    -- 기저 사례: 최고 관리자의 데이터를 선택
    SELECT id, name, manager_id
    FROM employees
    WHERE manager_id IS NULL
    UNION ALL
    -- 재귀 단계: 하위 관리자를 찾는 쿼리
    SELECT e.id, e.name, e.manager_id
    FROM employees e
    INNER JOIN EmployeeHierarchy eh
    ON e.manager_id = eh.id
)
SELECT * FROM EmployeeHierarchy;

여기서는 WITH RECURSIVE를 사용하여 직원과 그들의 상사를 재귀적으로 연결

 

CTE의 장점

쿼리 가독성: 복잡한 쿼리를 여러 부분으로 나누어 이해하기 쉽게 만든다.

재사용성: 동일한 서브쿼리를 반복해서 작성할 필요 없이 CTE를 재사용할 수 있다.

재귀 처리: 재귀적으로 데이터를 조회하는 경우 매우 유용