exist的使用分析 mysql學習筆記

2021-08-08 08:36:04 字數 1100 閱讀 5975

首先,我們要明白,就像

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...