WITH 구문이란.

  1. CTE(Common Table Expression) 라고도 부르며, MYSQL 8.0버전 이상에서 지원.
  2. 임시 결과 집합을 생성하여 복잡한 쿼리를 쉽게 작성할 수 있도록 돕는 기능.
  3. 복잡한 쿼리에서 하위 쿼리를 사용해 같은 결과를 여러번 계산해야 하는 경우를 줄여 준다.
  4. CTE는 같은 쿼리 블록을 여러 번 사용할 수 있도록 함.
  5. 쿼리 가독성을 높여 유지보수를 용이하게 한다.
  6. DB Optimizer는 CTE를 단순한 뷰나 서브쿼리보다 더 효율적으로 처리한다.

WITH구문 예시

WITH user_orders as( -- 앞으로 나올 구문(뷰테이블)을 "user_orders라고 부르겠다."
 SELECT user_name, SUM(price) as total_purchase --유저, 가격합계(구매금액 합계)
 FROM orders o INNER JOIN products p ON
 o.product_id = p.product_id
 GROUP BY 1
 ORDER BY 2 DESC -- 구매금액이 큰 순서 대로
)
SELECT user_orders.* --WITH구문에서 만든 user_orders를 테이블처럼 사용할 수 있게됨.
FROM user_orders uo INNER JOIN managers m ON
uo.user_name = m.user_name

WITH 구문은 이처럼 복잡한 쿼리도. 블록 단위로 작성할 수 있다.

또한 각 블록은 다른 블록에서도 테이블처럼 지칭해서 쓸 수 있기 때문에 같은 뷰 데이터를 불러오는 쿼리를 짤 때 반복해서 작성할 필요없이 블록을 만든 뒤 거기서 추출하면 됨.

0개의 댓글