首先,我們要明白,就像
if(t==7)
cout<<"yes「;
一樣,if後面的()裡的句子,只表面是真是假,對輸出什麼東西沒有任何影響
我們用select * / column1
from table1
where exists( select column2 from table2
where column3____)
的時候,那個()對於顯示出來的字段數量沒有任何影響!
然後,對於table1的每一條資料,都會挨個兒進行()裡的判斷,如果table2裡有符合條件的資料,則真,沒有則假;
所以其實column2 寫什麼都是無所謂的;
exists唯一做的就是根據真假來決定輸不輸出table1的資料;
這個說完了,我們再具體看看它到底幹了些什麼
exists對外表用loop逐條查詢,每拿一條都會檢視exists的條件語句,當 exists裡的條件語句能夠返回記錄行時(無論記錄行是的多少,只要能返回),條件就為真,返回當前loop到的這條記錄,反之如果exists裡的條 件語句不能返回記錄行,則當前loop到的這條記錄被丟棄;
not exists和exists整相反;
總的來說,如果a表有n條記錄,那麼exists查詢就是將這n條記錄逐條取出,然後判斷n遍exists條件
in查詢相當於多個or條件的疊加,符合乙個就可以;
這麼用select * from user where user_id in (1,2,3);
user_id =1/2/3都可以;
1,2,3是用來舉例子的,不代表任何字段;
not in 的話要求不等於1且不等於2且不等於3才可以;
in是先把子查詢條件的記錄全都查出來,就說有3個吧(1,2,3)。
然後把外表的user_id 乙個個拉出來,
先讓第一條id和1比,再和2比,再和3比,
然後拉出第二個;
還有,in查詢的子條件返回結果只能有乙個字段;
原文後面講的exists和in的效率問題我真的沒看懂呀
先記住下面這兩條
子表小in ;
子表大exists;
無論大小,not exists;
Oracle in與exist條件分析
在撰寫sql時,常常會煩惱要使用in or exists,在效能考量下,怎麼最快的做出抉擇呢?這是我的閱讀經驗,周詳的內容請參考最後的鏈結,有更詳盡的介紹。如果使用in,執行過程將如同下列所示 select from t1 where x in select y from t2 like selec...
In與Exist的區別
in 遍歷 exists 檢索到滿足條件即退出 not exists 檢索到不滿足條件即退出 本質區別 exists 由於exist屬於外驅動,故會利用索引來檢索資料 in 則屬於內驅動 故不能利用索引檢索資料 其中,in和not in類似全表掃瞄,效率低,一般用 exist和notexist代替其...
Exist 與in 的區別
exist是乙個存在判斷,in是乙個集合運算子,a in 這個運算中,前面是乙個元素,後面是乙個集合,集合中的元素型別是和前面的元素一樣的.而exists是乙個存在判斷,如果後面的查詢中有結果,則exists為真,否則為假.in 運算用在語句中,它後面帶的select 一定是選乙個字段,而不是sel...