본문 바로가기
IT/SQL

📄 WITH 절은 서브쿼리보다 더 강력하다

by 맘솔 2025. 5. 13.

 

복잡한 SQL을 다루다 보면, 서브쿼리를 중첩해서 사용하는 경우가 많습니다.

하지만 실무에서는 점점 더 WITH 절을 활용하는 흐름으로 가고 있죠.

왜 그럴까요? 이번 포스팅에서 WITH 절(공통 테이블 표현식, CTE)이 실무에서 선호되는 이유를 소개합니다.

 

❶ 쿼리 가독성이 뛰어나다

다음 두 쿼리를 비교해볼까요?


-- 서브쿼리 방식
SELECT a.dept_id, a.name,
       (SELECT COUNT(*) 
        FROM employee b 
        WHERE b.dept_id = a.dept_id) AS emp_count
FROM department a;
  

이제 동일한 쿼리를 WITH 절로 바꿔봅니다:


WITH emp_count_by_dept AS (
  SELECT dept_id, COUNT(*) AS emp_count
  FROM employee
  GROUP BY dept_id
)
SELECT d.dept_id, d.name, e.emp_count
FROM department d
LEFT JOIN emp_count_by_dept e
  ON d.dept_id = e.dept_id;
  

▶ 쿼리 블록이 분리되어 논리적 흐름이 더 명확해졌고, 재사용도 가능합니다.

 

❷ 유지보수 및 디버깅이 쉬움

WITH 절의 각 블록은 **임시 테이블처럼 독립 실행**이 가능하므로, 에러 발생 시 블록 단위로 디버깅이 훨씬 수월합니다.

또한 동일한 서브쿼리를 여러 번 사용할 경우, 한 번만 정의해서 재사용할 수 있다는 점도 큰 장점입니다.

 

❸ 다단계 쿼리 작성 시 유리 (중복제거)

데이터 분석처럼 중간 계산 → 필터링 → 최종 집계가 필요한 작업은 서브쿼리를 계속 중첩하기보단, WITH 절로 단계별 블록화하면 많이 깔끔해집니다.

예:

  1. 매출 집계 테이블 생성
  2. VIP 고객 필터링
  3. 최종 통계 계산

이 모든 단계를 WITH 블록으로 나누면, 쿼리 해석이 쉬워지고 협업 시에도 유리합니다.

 

✅ 정리 – WITH 절은 쿼리를 설계하는 구조 도구입니다

WITH 절은 단순 편의 기능이 아니라, **쿼리를 구조화하고 설계할 수 있는 고급 도구**입니다.

앞으로 복잡한 쿼리를 짤 때는, 서브쿼리 대신 CTE를 기본 옵션으로 고려해보세요.

 

* CTE : Common Table Expressions (임시적으로 정의된 테이블)