서브쿼리 vs CTE (Common Table Expressions), 뭐가 다를까?
잡학다식의 지식공방

IT/[SQL] Basic

서브쿼리 vs CTE (Common Table Expressions), 뭐가 다를까?

carpe08 2025. 4. 27. 19:41
320x100

SQL을 어느 정도 쓰다 보면 자연스럽게 부딪히는 개념이 바로 서브쿼리(Subquery)와 CTE(Common Table Expressions)다. 둘 다 쿼리 안에 또 다른 쿼리를 포함하는 방식인데, 언제 서브쿼리를 쓰고 언제 CTE를 써야 하는지 헷갈리는 경우가 많다. 이 글에서 둘의 차이, 장단점, 그리고 실무에서 어떻게 활용하는지를 정리해본다.


서브쿼리란?

서브쿼리는 다른 쿼리 안에 중첩되어 있는 SELECT 문이다. 일반적으로 WHERE, FROM, SELECT 절 내부에 사용된다.

예시 (SELECT 절 내부):

SELECT name,
       (SELECT COUNT(*) FROM orders WHERE orders.user_id = users.id) AS order_count
FROM users;

예시 (FROM 절 내부):

SELECT sub.name, sub.total
FROM (
  SELECT name, SUM(amount) AS total
  FROM orders
  GROUP BY name
) AS sub;

CTE란?

CTE(Common Table Expression)는 쿼리 블록에 이름을 붙여 재사용 가능한 일시적 테이블처럼 사용하는 방식이다. WITH 키워드로 시작한다.

예시:

WITH order_summary AS (
  SELECT user_id, COUNT(*) AS order_count
  FROM orders
  GROUP BY user_id
)
SELECT u.name, o.order_count
FROM users u
JOIN order_summary o ON u.id = o.user_id;

차이점 요약

항목 서브쿼리 CTE

선언 위치 쿼리 내부 어디든 가능 WITH 절 상단에 선언
가독성 복잡해질수록 떨어짐 구조적이고 깔끔함
재사용 불가 (같은 쿼리 반복 필요) 가능 (한 번 정의 후 여러 번 사용)
디버깅 상대적으로 어려움 블록 단위로 디버깅 용이
재귀 쿼리 어려움 재귀 구조 지원 (예: 트리 구조 탐색)

언제 서브쿼리? 언제 CTE?

  • 서브쿼리 추천 상황: 간단한 로직, 단일 조회, 빠르게 작성할 때
  • CTE 추천 상황: 복잡한 쿼리, 재사용이 필요한 경우, 여러 단계로 쿼리 나눌 때, 재귀 쿼리 작성 시

마무리

서브쿼리와 CTE는 비슷해 보이지만, 복잡한 쿼리를 다루는 데 있어 가독성과 유지보수성 측면에서 큰 차이를 만든다. 특히 협업이나 장기 프로젝트에서는 CTE가 훨씬 유리한 경우가 많다. 둘 다 자유롭게 쓸 수 있을 때, 진짜 SQL 고수라고 할 수 있다.


[SQL 쿡북]
https://link.coupang.com/a/cp14TA
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

 

SQL 쿡북:모든 SQL 사용자를 위한 쿼리 완벽 가이드 - 프로그래밍 언어 | 쿠팡

쿠팡에서 SQL 쿡북:모든 SQL 사용자를 위한 쿼리 완벽 가이드 구매하고 더 많은 혜택을 받으세요! 지금 할인중인 다른 프로그래밍 언어 제품도 바로 쿠팡에서 확인할 수 있습니다.

www.coupang.com

 

320x100
320x100