1. 程式人生 > >Oracle with..as使用方法

Oracle with..as使用方法

一、簡介

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之後的一些總結以及使用講解,僅供大家學習參考,一起學習一起進步。