Oracle with..as使用方法
阿新 • • 發佈:2018-11-05
一、簡介
with..as關鍵字,是以‘with’關鍵字開頭的sql語句,在實際工作中,我們經常會遇到同一個查詢sql會同時查詢多個相同的結果集,即sql一模一樣,這時候我們可以將這些相同的sql抽取出來,使用with..as定義。with..as相當於一張中間表,可以簡單理解為sql片段(類似java複用程式碼)。
下面我們通過兩個簡單的示例說明with..as的使用方法。
二、使用方法
【a】多次使用抽取出來
--with as 可以理解為一張臨時表或者理解成sql片段,在多次查詢語句相同的時候可以抽取出來,達到'一次解析,多次使用' --如果每個部分都去執行一遍的話,則成本比較高,可以使用with as短語,則只要執行一遍即可 with temp as (select '10001' as province_code from dual) select case when (select * from temp) = '10001' then 'equals' when (select * from temp) = '10002' then 'not equals' else 'unknown' end is_equals from dual;
【b】在union 語句中使用
--with as 非常適合在union 語句中 --注意:with as 語句最後面不能加分號,否則報缺失select關鍵字錯誤。 with temp1 as (select 'female' sex, 'zhangsan' stu_name from dual), temp2 as (select 'male' sex, 'lisi' stu_name from dual), temp3 as (select 'female' sex, 'wangwu' stu_name from dual) select * from temp1 union all select * from temp2 union all select * from temp3
注意點:with..as後面不能加分號,否則報錯。
【c】注意點:
1. 不能只定義with..as語句,定義了要使用它,否則會報錯
--只定義with..as會報錯
with temp1 as
(select 'female' sex, 'zhangsan' stu_name from dual),
temp2 as
(select 'male' sex, 'lisi' stu_name from dual)
2. 前面定義的with..as語句可以在後面定義的with..as語句中使用
--前面定義的with..as語句可以在後面定義的with..as語句使用 with temp1 as (select 'female' sex, 'zhangsan' stu_name from dual), temp2 as (select 'male' sex, 'lisi' stu_name from dual), temp3 as (select * from temp2) select * from temp1 union all select * from temp2 union all select * from temp3
三、總結
with..as其實就是將經常需要查詢的語句抽取出來,形成一個虛擬表,我們後面可以多次使用,達到‘一次解析,多次使用’的效果,大大提高執行的效率。本文是筆者在實際工作中使用到with..as之後的一些總結以及使用講解,僅供大家學習參考,一起學習一起進步。