WITH 절
1. WITH 절이란?
뜻 (영문)
The WITH clause lets you define a temporary result set (also called a CTE: Common Table Expression) that you can refer to within your main query.
뜻 (한글)
WITH 절은 **임시 테이블(=서브쿼리 결과)**을 먼저 정의하고, 그걸 메인 쿼리에서 재사용할 수 있게 해주는 문법이에요.
⸻
2. 왜 사용할까? • 복잡한 서브쿼리를 미리 이름 붙여서 정리할 수 있음 • 가독성 좋아짐 • 쿼리 재사용 가능 (같은 서브쿼리를 여러 번 쓰지 않아도 됨) • 중첩된 서브쿼리를 피할 수 있음
⸻
3. 기본 문법
WITH 임시이름 AS (
서브쿼리
) SELECT ... FROM 임시이름;
⸻
4. 예제
예제 테이블: sales
id product amount year 1 Laptop 2000 2023 2 Phone 1500 2023 3 Laptop 2200 2024 4 Phone 1800 2024 5 Laptop 2500 2024
⸻
예제 1: 2024년 판매 데이터만 따로 떼어서 분석
WITH sales_2024 AS (
SELECT * FROM sales WHERE year = 2024
) SELECT product, SUM(amount) AS total FROM sales_2024 GROUP BY product;
결과
product total Laptop 4700 Phone 1800
설명: WITH sales_2024라는 임시 테이블을 만들어 2024년 데이터만 분리하고, 그걸 기준으로 제품별 총 판매액을 계산했어요.
⸻
예제 2: WITH 절을 두 개 이상 사용하는 경우
WITH sales_2023 AS (
SELECT * FROM sales WHERE year = 2023
), sales_2024 AS (
SELECT * FROM sales WHERE year = 2024
) SELECT '2023' AS year, product, SUM(amount) AS total FROM sales_2023 GROUP BY product UNION ALL SELECT '2024' AS year, product, SUM(amount) AS total FROM sales_2024 GROUP BY product;
결과
year product total 2023 Laptop 2000 2023 Phone 1500 2024 Laptop 4700 2024 Phone 1800
설명: 연도별로 따로 나눈 데이터를 UNION ALL로 합쳐서 보여줍니다.
⸻
5. WITH 절 vs 서브쿼리
항목 WITH 절 서브쿼리 가독성 매우 높음 복잡하면 읽기 어려움 재사용 가능 (한 번 정의해서 여러 번 사용) 동일 쿼리를 반복 작성해야 함 성능 Oracle이 내부적으로 최적화 가능 중복 계산 발생 시 성능 저하 가능
⸻
6. 주의사항 • Oracle 11g 이상부터 지원되며, Oracle 19c에서도 완벽히 사용 가능 • WITH 절은 SELECT, INSERT, UPDATE, DELETE에도 사용할 수 있음 • WITH 절 내 쿼리에는 ORDER BY를 직접 넣을 수 없음 (단, ROW_NUMBER()와 함께 정렬 가능)
⸻
요약 정리
개념 설명 WITH 절 서브쿼리를 임시 테이블처럼 이름 붙여 사용 장점 쿼리 재사용, 가독성 향상, 유지보수 용이 사용 예 복잡한 쿼리 정리, 여러 조건 조합 분석 등