SQL : CTE(Common Table Expression)/WITH구문

정민·2024년 2월 1일

SQL

목록 보기
15/16

1. WITH 구문


WITH문 (Common Table Expression, CTE)과 서브쿼리는 둘 다 SQL 쿼리의 구조를 단순화하고 복잡한 쿼리를 분해하는 데 유용.

  • CTE (WITH문) : CTE는 쿼리의 시작 부분에 정의되며, 이름을 가진 임시 결과 집합을 생성 -> 코드의 가독성 향상.
    CTE 내에서 정의된 쿼리를 메인 쿼리에서 여러 번 재사용할 수 있음.
    다른 사람과 코드를 함께 보기에 편리함.
  • 서브쿼리 : 서브쿼리는 메인 쿼리 내에서 일반적으로 한 번만 사용됨.

  • WHIT문 (Common Table Expression, CTE)를 스크립트 맨 먼저 선언을 해준 다음, 메인쿼리에서 사용
WITH cte_name AS (
-- CTE 정의 쿼리
)
-- 메인 쿼리
SELECT * FROM cte_name;

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;

  • orders 테이블에서 가장 최근 주문을 찾는 쿼리
  • LatestOrders 테이블과 orders 테이블을 JOIN함

SELECT customerNumber, MAX(orderDate) AS MaxOrderDate
FROM orders
GROUP BY customerNumber;

  • 위 WITH문 실행.
  • 여기서 select에 customerName은 실행할 수 없음. 왜냐하면 GROUP BY라는 집계함수는 집계의 결과는 나타낼 수 있는데 customerName은 집계의 결과가 아니라 나타낼 수 없음.
  • 다른 예로, 고객의 넘버가 같은 경우에도 status가 다른 경우가 있어서 출력 불가능
  • 그래서 결과 옆에 다른 데이터를 추가로 출력하고 싶다면, 기존 테이블에서 그 데이터를 가지고 와 붙여야 함 (WITH문 사용)
profile
데이터 공부하는 예비 데이터 분석가, 김정민입니다.

0개의 댓글