SQL語句中in 與 exists的區別

2022-08-03 00:51:09 字數 580 閱讀 7511

sql語句中in 與 exists的區別

sql中exists檢查是否有結果,判斷是否有記錄,返回的是乙個布林型(true/false);

in是對結果值進行比較,判斷乙個字段是否存在於幾個值的範圍中;

exists主要用於片面的,有滿足乙個條件的即可, in主要用於具體的集合操作,有多少滿足條件;

in適合內外表都很大的情況,exists適合外表結果集很小的情況.

如果子查詢得出的結果集記錄較少,主查詢中的表較大且又有索引時應該用in , 反之如果外層的主查詢記錄較少,子查詢中的表大,又有索引時使用exists。

其實我們區分in和exists主要是造成了驅動順序的改變(這是效能變化的關鍵),如果是exists,那麼以外層表為驅動表,先被訪問,如果是in,

那麼先執行子查詢,所以我們會以驅動表的快速返回為目標,那麼就會考慮到索引及結果集的關係了 ,另外in時不對null進行處理。

in 是把外表和內錶作hash 連線,而exists是對外表作loop迴圈,每次loop迴圈再對內表進行查詢。

如果查詢的兩個表大小相當,那麼用in和exists差別不大。

sql語句中的exists和in

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

SQL點滴35 SQL語句中的exists

原文 sql點滴35 sql語句中的exists 比如在northwind資料庫中有乙個查詢為 select c.customerid,companyname from customers c where exists select orderid from orders o where o.cus...

SQL點滴35 SQL語句中的exists

原文 sql點滴35 sql語句中的exists 比如在northwind資料庫中有乙個查詢為 select c.customerid,companyname from customers c where exists select orderid from orders o where o.cus...