CTE(Common Table Expressions)의 활용법 – 서브쿼리보다 명확한 쿼리 작성
SQL에서 복잡한 쿼리를 작성할 때, 서브쿼리로만 해결하기 어려운 경우가 많습니다. 이럴 때 CTE (Common Table Expressions), 즉 WITH 구문을 사용하면 쿼리의 가독성과 유지보수를 크게 향상시킬 수 있습니다.
CTE의 기본 구조
CTE는 쿼리 상단에 WITH 절로 정의하며, 마치 임시 테이블처럼 재사용할 수 있습니다. 기본 구조는 다음과 같습니다.
WITH cte_name AS (
SELECT ... FROM ...
)
SELECT * FROM cte_name;
첫 번째 부분에서 cte_name 이라는 이름의 CTE를 정의하고, 이후 메인 쿼리에서 이를 참조합니다.
CTE 사용의 장점
가독성 향상
복잡한 로직을 여러 단계로 나누어 각각의 CTE로 정의하면, 전체 쿼리의 흐름을 한눈에 파악할 수 있어 디버깅과 협업에 유리합니다.재사용성
한 번 정의한 CTE를 메인 쿼리 내에서 여러 번 사용할 수 있으므로, 같은 로직을 반복 작성할 필요가 없습니다.재귀 쿼리 작성
CTE는 재귀적 호출을 지원하여, 계층적 데이터(예: 조직도나 카테고리 구조)를 쉽게 처리할 수 있습니다.
실무 예시: 고객별 최근 주문 내역과 누적 주문 수
아래 예시는 고객 테이블과 주문 테이블을 기반으로, 각 고객의 최근 주문 날짜와 누적 주문 수를 CTE로 먼저 계산한 후, 이를 메인 쿼리에서 결합하는 예시입니다.
WITH order_summary AS (
SELECT customer_id,
COUNT(*) AS total_orders,
MAX(order_date) AS last_order_date
FROM orders
GROUP BY customer_id
)
SELECT c.customer_id, c.name,
o.total_orders, o.last_order_date
FROM customers c
LEFT JOIN order_summary o ON c.customer_id = o.customer_id;
이 쿼리는 주문 집계 로직을 별도로 분리하여, 고객 테이블과 조인할 때 단순하게 결과를 얻을 수 있습니다.
마무리
CTE(Common Table Expressions)는 복잡한 쿼리를 구조화하고 가독성을 높이는 데 매우 유용한 도구입니다. 서브쿼리로 얽힌 코드를 단순화하고, 재사용 가능한 형태로 구현할 수 있으므로, 실무에서 적극 활용하는 것이 좋습니다.
#SQL #CTE #WITH구문 #공통테이블표현 #쿼리최적화 #SQL기초 #실무팁 #데이터베이스
'SQL 기초 정리' 카테고리의 다른 글
IN 절 vs EXISTS 절 – 조건은 같아도 성능은 다르다 (0) | 2025.04.12 |
---|---|
LIKE 연산자의 와일드카드(%, _) 정확히 알고 쓰기 (0) | 2025.04.12 |
CASE WHEN 구문의 활용법 – 조건 분기와 표현식을 동시에 해결하는 방법 (0) | 2025.04.11 |
COUNT(*)와 COUNT(컬럼명)의 차이 – 결과는 비슷해도 의미는 다르다 (0) | 2025.04.11 |
JOIN 없이도 가능하다? SQL에서 서브쿼리로 해결하는 3가지 실무 상황 (0) | 2025.04.11 |