내일배움캠프/SQL

[SQL] WITH절이란, 서브쿼리와의 쓰임새 차이

dydatablog 2024. 12. 6. 20:42
728x90

WITH문 : 이름을 가진 서브쿼리를 정의한 후 뒤에서 사용할 수 있는 구문.

장점 :

- 쿼리의 전체적인 가독성을 높이고, 재사용할 수 있다.

- 계층형쿼리를 구현할 수 있음.(WITH순환절)

- 대부분의 DBMS에서 지원한다.

 

기본 구조 :

WITH (테이블명) AS (SELECT ~ FROM ~)

 

예시)

WITH payment_data AS (
    SELECT order_id, SUM(payment_value) AS total_sales
    FROM payments
    GROUP BY order_id
)			-- 1. WITH를 이용해 order_id별 payment_value의 합계가 있는 테이블을 payment_data라는 이름으로 지정
SELECT order_id, total_sales -- 4. 다음을 출력
FROM payment_data		-- 2. WITH문에서 만든 payment_data에서
WHERE total_sales > 100	-- 3.총합계 금액이 100이상인 사람의

 

여러쿼리를 조합하여 사용할 수도 있음 (참고 : https://dbaant.tistory.com/21)

WITH sales_data AS (
    SELECT customer_id, SUM(amount) AS total_sales
    FROM sales
    GROUP BY customer_id
),
big_customers AS (
    SELECT customer_id
    FROM sales_data
    WHERE total_sales > 10000
)
SELECT c.*
FROM customers c
INNER JOIN big_customers bc ON c.customer_id = bc.customer_id;

서브쿼리와의 쓰임새 차이

  Subquery WITH
활용 SELECT 절의 결과를 WHERE절에서 하나의 변수처럼 사용하고 싶을 때 사용 이름을 가진 서브쿼리를 정의한 후 사용하는 구문
위치 SELECT, FROM, WHERE 독립적
장점 코딩할 때는 편하다 가독성이 높아지고, 재사용할 수 잇음
단점 연산 비용이 추가됨. 최적화 받을 수 없음. 쿼리가 복잡해짐 튜닝시 적절하게 가공되지 않으면 메모리 로드가 많이 걸림

참고: https://project-notwork.tistory.com/111

728x90