[SQL] 반복 쿼리엔 CTE, 한 번 쓰는 건 서브쿼리

Unit·2025년 5월 4일

SQL

목록 보기
10/59

쿼리를 짜다 보면,
같은 로직을 반복해서 쓰거나,
쿼리 흐름을 나누고 싶을 때가 있습니다.

서브쿼리와 CTE(Common Table Expression)는 이럴 때 사용할 수 있는 선택지인데요.

둘 다 쓸 수 있지만,
용도와 상황에 따라 더 나은 선택이 달라집니다.


✅ 예시 : 주문 수 기준 필터링

📌 서브쿼리

SELECT *
FROM (
    SELECT user_id, COUNT(*) AS order_cnt
    FROM orders
    GROUP BY user_id
) AS sub
WHERE order_cnt >= 3;

📌 CTE

WITH order_count AS (
    SELECT user_id, COUNT(*) AS order_cnt
    FROM orders
    GROUP BY user_id
)
SELECT *
FROM order_count
WHERE order_cnt >= 3;

→ 결과는 같지만, 쿼리의 흐름은 다릅니다.


✅ 어떤 기준으로 선택해야 할까?

상황추천 방식
한 번만 쓰고 끝나는 로직서브쿼리로 충분
같은 쿼리를 여러 번 참조해야 함CTE가 더 명확
쿼리를 단계별로 나누고 싶음CTE로 가독성 ↑
성능 이슈가 민감한 환경CTE 반복 참조는 주의 필요

정리

✔️ CTE는 깔끔한 구조와 재사용에 강점이 있지만, 모든 상황에서 더 나은 건 아닙니다.
✔️ 쿼리의 복잡도, 재사용 여부, 성능 조건을 보고 선택하세요.

profile
협업, 유지보수, 최적화를 고려한 데이터 실무 팁을 정리합니다.

0개의 댓글