WITH cte_name AS ( SELECT column1, column2 FROM table_name WHERE condition)SELECT *FROM cte_name;
주요 특징
가독성 향상 - 복잡한 쿼리를 단계별로 나눠 이해하기 쉽게 만듦
재사용 가능 - 동일한 서브쿼리를 여러 번 참조 가능
재귀 쿼리 지원 - 계층 구조 데이터 처리 가능
재귀 쿼리 예제
-- 기본 CTEWITH sales_2024 AS ( SELECT product_id, SUM(amount) as total_sales FROM orders WHERE YEAR(order_date) = 2024 GROUP BY product_id)SELECT p.product_name, s.total_salesFROM products pJOIN sales_2024 s ON p.product_id = s.product_id;-- 재귀 CTEWITH RECURSIVE org_chart AS ( -- 기본 케이스 SELECT employee_id, name, manager_id, 1 as level FROM employees WHERE manager_id IS NULL UNION ALL -- 재귀 케이스 SELECT e.employee_id, e.name, e.manager_id, oc.level + 1 FROM employees e JOIN org_chart oc ON e.manager_id = oc.employee_id WHERE oc.level < 3 -- 3단계까지만 조회, 조회 계층의 깊이를 조절할 수 있음)SELECT * FROM org_chart;
작동 방식
초기 실행 (기본 케이스)
SELECT employee_id, name, manager_id, 1 as levelFROM employeesWHERE manager_id IS NULL