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 | 독립적 |
장점 | 코딩할 때는 편하다 | 가독성이 높아지고, 재사용할 수 잇음 |
단점 | 연산 비용이 추가됨. 최적화 받을 수 없음. 쿼리가 복잡해짐 | 튜닝시 적절하게 가공되지 않으면 메모리 로드가 많이 걸림 |
728x90
'내일배움캠프 > SQL' 카테고리의 다른 글
[SQL]SQL반복문_재귀적 CTE(WITH RECURSIVE) (1) | 2024.12.12 |
---|---|
[SQL] null값 대체하기_COALESCE, IFNULL (0) | 2024.12.12 |
[SQL]WINDOW함수 (0) | 2024.12.05 |
[SQL]서브쿼리(Subquery)의 특징과 분류 (1) | 2024.12.02 |
[SQL]SELF JOIN,UNION_SQL에서 FULL OUTER JOIN 구현하기 (0) | 2024.12.02 |