Oracle中with as的用法


with as短語,也叫做子查詢部分(subquery factoring),可以做很多事情,定義一個SQL片斷,該SQL片斷會被整個SQL語句所用到。With查詢語句不是以select開始的,而是以“WITH”關鍵字開頭,可認為在真正進行查詢之前預先構造了一個臨時表,之后便可多次使用它做進一步的分析和處理。有的時候,是為了讓SQL語句的可讀性更高些,也有可能是在UNION ALL的不同部分,作為提供數據的部分。

特別對於UNION ALL比較有用。因為UNION ALL的每個部分可能相同,但是如果每個部分都去執行一遍的話,則成本太高,所以可以使用WITH AS短語,則只要執行一遍即可。如果WITH AS短語所定義的表名被調用兩次以上,則優化器會自動將WITH AS短語所獲取的數據放入一個TEMP表里,如果只是被調用一次,則不會。而提示materialize則是強制將WITH AS短語里的數據放入一個全局臨時表里。

一、with as的用法

 1 --針對一個別名:
 2 with tempName as (select ....)
 3 select...
 4 
 5 --針對多個別名:
 6 with 
 7     tempName1 as (select ....),
 8     tempName2 as (select ....),
 9     tempName3 as (select ....) ...
10 select...

二、with as實例

 

 1 --相當於建了個e臨時表  
 2 
 3 with e as (select * from scott.emp e where e.empno=7499)  
 4 
 5 select * from e; 
 6 
 7 --相當於建了e、d臨時表  
 8 
 9 with  
10 
11      e as (select * from scott.emp),  
12 
13      d as (select * from scott.dept)  
14 
15 select * from e, d where e.deptno = d.deptno; 

三、with clause方法的優點

1.增加了SQL的易讀性,如果構造了多個子查詢,結構會更清晰;更重要的是:“一次分析,多次使用”,這也是為什么會提供性能的地方,達到了“少讀”的目標。

2.第一種使用子查詢的方法表被掃描了兩次,而使用WITH Clause方法,表僅被掃描一次。這樣可以大大的提高數據分析和查詢的效率。另外,觀察WITH Clause方法執行計划,其中“SYS_TEMP_XXXX”便是在運行過程中構造的中間統計結果臨時表。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM