Computer Science/DataBase

[데이터베이스] WITH구문 : CTE

아란정 2025. 3. 8. 00:41
728x90
반응형

서브쿼리를 배웠다면 with 구문도 알아야 한다. 둘의 기능은 비슷하나 가독성은 with가 높다. 재사용이 가능하기 때무니다.

 

CTE (Common Table Expression, CTE) : WITH

CTE는 쿼리의 시작 부분에 정의되며, 정의된 쿼리는 메인 쿼리에서 여러 번 재사용할 수 있다.

  • 코드 공유시 가독성이 높다.
  • 복잡한 sql 쿼리의 구조 대신 with를 이용해 단순화한다.

WITH {CTE 이름} AS  -- 이렇게 시작한다. ❌AS 뒤에 별칭(Alias) 만드는 것이 아니다❌ 별칭은 join 문에서 만들었다. 

WITH LatestOrders AS 
(
    SELECT customerNumber, MAX(orderDate) AS MaxOrderDate
    FROM orders
    GROUP BY customerNumber
)
    SELECT o.orderNumber, o.orderDate, o.customerNumber
    FROM orders o
    JOIN LatestOrders lo ON o.customerNumber = lo.customerNumber 
    	AND o.orderDate = lo.MaxOrderDate;

with로 만든 LatestOrders는 고객의 최근 주문 일자를 반환하는 테이블이다.

메인 쿼리에서 LatestOrders를 JOIN하여 고객의 최근 주문에 대한 주문 일자를 받을 수 있다. 

서브 쿼리로 변환하면 

SELECT o.orderNumber, o.orderDate, o.customerNumber
FROM orders o, (SELECT customerNumber, MAX(orderDate) AS MaxOrderDate
				FROM orders
				GROUP BY customerNumber) as lo
WHERE o.customerNumber = lo.customerNumber AND o.orderDate = lo.MaxOrderDate;

요런 느낌. 확실히 with 구문이 보기 편하다. 

728x90