* 쿼리 블럭: WITH 쿼리 블럭 이름 AS (subquery)

- 사용자의 임시 테이블스페이스에 저장

- in-line view 또는 임시 테이블로 쓰임



  * Benefits

- easy to read

- write once, read multiple times (reusability)

- performance improvement


----------------

WITH

dept_costs AS (

   SELECT   d.department_name, SUM(e.salary) AS dept_total

   FROM     employees e JOIN departments d

   ON       e.department_id = d.department_id

   GROUP BY d.department_name),

avg_cost   AS (

   SELECT   SUM(dept_total)/COUNT(*) AS dept_avg

   FROM     dept_costs)

SELECT * 

FROM     dept_costs 

WHERE    dept_total > (SELECT dept_avg 

      FROM avg_cost)

ORDER BY department_name;



  * Guidelines

- only with SELECT

- visibility of query name: all WITH elements and their subqueries defined after it

                                    the main query block and its subqueries

        - 쿼리 이름과 테이블 이름이 같다면 쿼리 이름이 우선권을 가짐

- WITH 절에 하나 이상의 쿼리 블럭이 올 수 있으며 콤마로 구분

+ Recent posts