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