MySQL資料庫中in和exists有什麼區別

2021-10-09 10:57:16 字數 786 閱讀 1574

偽**如下

select

*from table_a a where a.id in

(select b.id from table_b b)

偽**如下

select

*from table_a a where exixts (

select b.id from table_b b where a.id = b.id)

使用in關鍵字查詢時,會先執行子查詢,子查詢語句僅返回乙個資料列,然後把查詢得到的結果和外表做笛卡爾積查詢,再通過條件進行篩選,與外層查詢語句進行比較,只會執行一次,會把符合條件的記錄全部查出來加入到結果集中。

in的底層是兩層巢狀for迴圈,相當於兩表做笛卡爾乘積。

使用exists關鍵字查詢時,系統對子查詢的條件判斷是否返回行,如果至少返回一行,那麼exists的結果為true,反之為false,只是外層查詢需要拿這個布林值做判斷,然後根據exists的結果進行二次匹配,匹配和結果集相同的資料加入到結果集中。

exists的底層是for迴圈裡巢狀if判斷,先if判斷,在進行迴圈操作。

in適用於外表大內錶小。

exists適用於外表下內錶大。

如果內錶與外表差不多,都差不多,如果字段型別為字串,需要給in查詢中的數值與字串值都需要新增引號,就可以使用索引了。如果字段型別為int,則in查詢中的值不需要新增引號,索引也會起作用。

如果是not in會使索引失效,而not exists仍舊使索引生效,不管何種情況推薦使用not exists。

mysql資料庫中的 MySQL資料庫中定義

定義資料表 假如某個電腦生產商,它的資料庫中儲存著整機和配件的產品資訊。用來儲存整機產品資訊的表叫做pc 用來儲存配件供貨資訊的表叫做parts。在pc表中有乙個字段,用來描述這款電腦所使用的cpu型號 在parts表中相應有乙個字段,描述的正是cpu的型號,我們可以把它想成是全部cpu的型號列表。...

mysql資料庫中mysql庫中user表被刪除

由於mysql資料庫中mysql庫中的user表被刪除,試了一些方法恢復不了,決定把原來的mysql資料夾刪除後重新再安裝個新的,其實這個不用安裝,解壓後就行 按照另一篇部落格 mysql安裝 裡走到生成data檔案時出錯,然後 mysqld console檢視出錯原因 server data di...

mysql資料庫中的方法 mysql資料庫基本方法

啟動 net start mysql 進入 mysql u root p mysql h localhost u root p databasename 列出資料庫 show databases 選擇資料庫 use databasename 列出 show tables 顯示 列的屬性 show c...