Oracle中exists替代in語句

2022-01-16 09:51:33 字數 960 閱讀 3026

大家都知道exists的速度要比in的速度快,也知道exists函式返回乙個布林值,也就是說exists函式裡最後要是 a.id =b.id類似這種方式結束。

例如:

select *

from tbl_rebate_day_count

where id in (1, 2, 3, 4, 5);

(假設tbl_algo_record 表中有id=1,2,3,4,5)常規的方式轉換成exists為

select *

from tbl_rebate_day_count a

where exists(select *

from tbl_algo_record b where a.id = b.id);

上面是一張表的情況下可以這樣寫(為了演示這裡我用了*,實際生產中不推薦大家寫*號),但有的時候,這個exists中需要的是乙個固定的值,而不是一張表又要怎麼寫呢?

這裡,我們可以例用union關鍵字

union 操作符用於合併兩個或多個 select 語句的結果集。

請注意,union 內部的 select 語句必須擁有相同數量的列。列也必須擁有相似的資料型別。同時,每條 select 語句中的列的順序必須相同。

最後轉換成exists的語句為:

select *

from tbl_rebate_day_count t

where exists(select *

from (select 1 as id from dual

union select 2 from dual

union select 3 from dual

union select 4 from dual

union select 5 from dual

) tmp

where tmp.id = t.id)

SQL中如何使用EXISTS替代IN

我們在程式中一般在做sql優化的時候講究使用exists帶替代in的做法,理由是exists執行效率要比in高。之前我一直挺懵懂的一件事情是如何使用exists來替換in呢,二者表示的意義又是什麼呢?今天就我個人理解記錄一下 in表示範圍,指某一字段在某一範圍之內,這個範圍一般使用子查詢來獲取,由此...

SQL 怎麼用EXISTS替代IN

我們在程式中一般在做sql優化的時候講究使用exists帶替代in的做法,理由是exists執行效率要比in高。之前我一直挺懵懂的一件事情是如何使用exists來替換in呢,二者表示的意義又是什麼呢?今天就我個人理解記錄一下 in表示範圍,指某一字段在某一範圍之內,這個範圍一般使用子查詢來獲取,由此...

Oracle中exists與in區別

in 與 exist 的語法比較 select from 資料表 t where t.x in 括號內可以是符合t.x欄位型別的值集合,如 1 2 3 但如果t.x是number型別的時候,似乎這樣的寫法會出問題 也可以是通過另外的select語句查詢出來的值集合,如 select y from 資...