Posted on 2019-01-11 09:33
Prayer 閱讀(398)
評論(0) 編輯 收藏 引用 所屬分類:
DB2
參考:https://www.2cto.com/database/201109/104960.html;http://ask.csdn.net/questions/680006
1 :
SELECT
*
FROM
華東
WHERE
公司代碼 IN ( SELECT 公司代 FROM 備選客戶 WHERE 公司代 != '' AND 公司代 IS NOT NULL );
2:用exists替換
SELECT
*
FROM
華東
WHERE
EXISTS (
SELECT
公司代
FROM
備選客戶 where 華東.公司代碼=`備選客戶`.公司代);
3: in和exists一點(diǎn)區(qū)別
exists做為where 條件時(shí),是先對where 前的主查詢詢進(jìn)行查詢,然后用主查詢的結(jié)果一個(gè)一個(gè)的代入exists的查詢進(jìn)行判斷,如果為真則輸出當(dāng)前這一條主查詢的結(jié)果,否則不輸出。
in 是把外表和內(nèi)表作hash 連接,而exists是對外表作loop循環(huán),每次loop循環(huán)再對內(nèi)表進(jìn)行查詢。一直以來認(rèn)為exists比in效率高的說法是不準(zhǔn)確的。
如果查詢的兩個(gè)表大小相當(dāng),那么用in和exists差別不大。
如果兩個(gè)表中一個(gè)較小,一個(gè)是大表,則子查詢表大的用exists,子查詢表小的用in:
---------------------
作者:csdncooker
來源:CSDN
原文:https://blog.csdn.net/csdncooker/article/details/79299258
版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請附上博文鏈接!