Exists:將外查詢表的每一行,代入內查詢作為檢驗,如果內查詢返回的結果取非空值,則EXISTS子句返回TRUE,這一行行可作為外查詢的結果行,否則不能作為結果。
區別:
IN表是外邊和內表進行hash連接,是先執行子查詢。
EXISTS是對外表進行循環,然后在內表進行查詢。
適用范圍:
當查詢字段進行了索引時,主表 A 大於從表 B,使用 IN 子查詢效率更高,相反主表 A 小於從表 B 時,使用 EXISTS 子查詢效率更高
IN有一個缺陷是不能判斷NULL,因此如果字段存在NULL值,則會出現返回,因為最好使用NOT EXISTS。
下面是SQL Server的執行計划: