SQL中 IN 與 EXISTS的使用

2021-10-06 20:30:55 字數 1289 閱讀 9989

大家在談到sql優化時,都會說到用exists 代替 in 查詢。

現在就談談這兩個的用法。

in查詢相當於多個or條件的疊加,這個比較好理解,比如下面的查詢

select

*from

user

where userid in(1

,2,3

);

等效於

select

*from

user

where userid =

1or userid =

2or userid =

3;

not in 也很好理解,就是多個and != 條件

exists對外表用loop逐條查詢,每次查詢都會檢視exists的條件語句,當 exists裡的條件語句能夠返回記錄行時(無論記錄行是的多少,只要能返回),條件就為真。

舉個例子

select

*from a where

exists

(select id from a)

只要a表不為空,則全部資料都會返回,因為select id from a作為條件,一直返回true。exists 看的是 bool 值 而不是返回的結果集

所以兩者的替換使用,必須要有這個思想。exists 是判斷條件是否為真, in 後面接的是結果集

例如:a 表:

idname1a

2b3c

4d5e

b表:id

uid112

2334

4使用in查詢時

select

*from a where id in

(select uid from b)

此時會查詢到 1,2,3,4

使用exists查詢

錯誤示範:

select

*from a where

exists

(select uid from b)

此時由於select uid from b一直返回真,所以會查詢到1,2,3,4,5

正確示範:

select

*from a where

exists

(select uid from b where a.id = b.uid)

當遍歷到第五條時,由於條件為false,查詢返回1,2,3,4

SQL中IN與EXISTS用法的區別

結論為 in 適合b錶比a表資料小的情況 exists 適合b錶比a表資料大的情況 當a表資料與b表資料一樣大時,in與exists效率差不多,可任選乙個使用.舉例 select from emp 基礎表 where empno 0 and exists select x from dept whe...

SQL中EXISTS的使用

網上有一些關於exists 說明的例子,但都說的不是很詳細.比如對於著名的供貨商資料庫,查詢 找出 所有零件的 商的 商名,對於這個查詢,網上一些關於exists的說明文章都不能講清楚.我先解釋本文所用的資料庫例子,供貨商 資料庫,共3個表.供貨商表 s s sname 貨物表 p p pname ...

SQL中EXISTS的用法

比如在northwind資料庫中有乙個查詢為 select c.customerid,companyname from customers c where exists select orderid from orders o where o.customerid c.customerid 這裡面的...