1、從語義上來說:in是去匹配in後的結果集;exists是條件上的二次匹配,匹配和結果集内相同的數據。
2、實現的效果差異不大,内部的實現差異挺大。in是有數量上限的,exists沒有。
in,是由in後面的數據先運行==>得出結果集後再去匹配;
exists,則相反,是先運行外面的結果,再去和exists内的數據做匹配;
執行順序和效率:1、in先執行子查詢,将子查詢的結果存放在緩存中,在執行外層的查詢,适合用在子查詢結果集較小的情況。
2、exists先執行外查詢,将外查詢的每一條結果放到内查詢中比對,如果存在,就保留外查詢的結果,否則删除,适合用在外表結果集小于内表的情況。
總結:in内部的數據要少一些,exists要外部數據少一些,更能提升效率。
注意:exists用于檢查子查詢是否至少會返回一行數據,該子查詢實際上并不返回任何數據,而是返回值true或false。
select * from health_sys_user WHERE user_id in (SELECT user_id FROM health_sys_user WHERE user_id = 1 OR user_id = 26);
select * from health_sys_user WHERE exists (SELECT * FROM health_sys_role where role_id=26);
,
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!