본문 바로가기
웹프로그래밍 무작정따라하기/Database

[DB] WITH문

by RIMD 2024. 1. 5.

WITH문은

MySQL에서 공통 테이블식(CTE, Commmon Table Expressions)을 사용하여

쿼리 내에서 임시 결과 집합을 정의하는 데 사용됩니다.

 

WITH문을 사용하면 복잡한 쿼리를 더 쉽게 작성할 수 있고 가독성을 높일 수 있습니다.

WITH문의 기초 문법 HOW TO

WITH cte_name (column1, column2, ...) AS (
    SELECT column1, column2, ...
    FROM your_table
    WHERE conditions
)
SELECT *
FROM cte_name;

 

WITH문의 응용 예시

고객별 주문된 제품 수를 계산하는 쿼리

WITH OrderCounts AS (
    SELECT customer_id, COUNT(*) AS total_orders
    FROM orders
    GROUP BY customer_id
)
SELECT customers.*, OrderCounts.total_orders
FROM customers
LEFT JOIN OrderCounts ON customers.customer_id = OrderCounts.customer_id;

 

* 서브 쿼리와의 성능 비교

WITH 문과 서브쿼리는 비슷한 목적을 달성할 수 있지만 성능 면에서 차이가 있을 수 있습니다. 일반적으로는 쿼리 옵티마이저가 최적의 실행 계획을 선택하므로 두 가지 방식 모두 효율적일 수 있습니다. 그러나 몇 가지 경우에는 차이가 나타날 수 있습니다.

- 최적화 여부:

WITH 문은 실행 계획을 최적화하는 데 도움이 될 수 있습니다. 서브쿼리의 경우에는 동적으로 실행되기 때문에 최적화가 어려울 수 있습니다.



- 가독성 및 유지보수:

WITH 문은 가독성이 뛰어나며, 여러 쿼리에서 재사용할 수 있습니다. 서브쿼리의 경우 중복 코드가 발생할 수 있습니다.



- 복잡성과 성능:

WITH 문은 복잡한 쿼리에서 코드를 간소화하는 데 도움이 되지만, 데이터 양이 많고 복잡한 쿼리의 경우 성능에 영향을 미칠 수 있습니다. 성능은 데이터베이스 엔진, 인덱스, 테이블 크기 등에 따라 다를 수 있습니다.

일반적으로는 WITH 문과 서브쿼리 중에서 어떤 것을 사용해야 할지 정확히 예측하기 어렵습니다. 

성능 테스트를 통해 각각의 상황에 가장 적합한 방법을 결정하는 것이 좋습니다.

 

댓글