복잡한 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 절로 단계별 블록화하면 많이 깔끔해집니다.
예:
- 매출 집계 테이블 생성
- VIP 고객 필터링
- 최종 통계 계산
이 모든 단계를 WITH 블록
으로 나누면, 쿼리 해석이 쉬워지고 협업 시에도 유리합니다.
✅ 정리 – WITH 절은 쿼리를 설계하는 구조 도구입니다
WITH
절은 단순 편의 기능이 아니라, **쿼리를 구조화하고 설계할 수 있는 고급 도구**입니다.
앞으로 복잡한 쿼리를 짤 때는, 서브쿼리 대신 CTE를 기본 옵션으로 고려해보세요.
* CTE : Common Table Expressions (임시적으로 정의된 테이블)
'IT > SQL' 카테고리의 다른 글
[SQL]📊 GROUP BY – 집계 기준 설계 3가지 관점 (0) | 2025.05.15 |
---|---|
🔎 서브쿼리 없이 조건만 추출? – EXISTS 패턴 실무 활용법 (0) | 2025.05.14 |
🧩 CASE WHEN이 필터링에도 쓰인다고요? (0) | 2025.05.11 |
🔄 LEFT JOIN인데 데이터가 빠져요? – JOIN 실수 CASE (0) | 2025.05.11 |
❓ WHERE 절이 있는데 조건이 왜 안 먹히나요? (0) | 2025.05.11 |