1.in或not in 裡面不能有null,否則會得不到結果;exists在子查詢中使用null仍返回結果集。
2.exists 子查詢是乙個受限的select語句(不允許有compute和into),結果型別為boolean:若子查詢包含行,則返回true;in確定給定的值是否與子查詢或列表中的值相匹配。
exists檢測行的存在,後面可以時整句的查詢語句,如select * from…;in後面只能是對單列。
3.資料量大時,exists效率高。
in會在先執行一次後面的大表中的全表掃瞄,然後生成乙個新的虛表在進行全表掃瞄,而exists只執行一次後面的大表掃瞄,每次掃瞄為真時就返回繼續往下走。
(通過使用exists,oracle會首先檢查主查詢,然後執行子查詢直到它找到第乙個匹配項,這就節省了時間。oracle在執行in子查詢時,首先執行子查詢,並將獲得的結果列表存放在乙個加了索引的臨時表中。在執行子查詢之前,系統先將主查詢掛起,待子查詢執行完畢,存放在臨時表中以後再執行主查詢。這也就是使用exists比使用in通常查詢速度快的原因)
資料庫sql exists和in的區別
exists和in in 是把外表和內錶作hash join,而exists是對外表作loop,每次loop再對內表進行查詢。如 a select from t1 a where exists select from t2 b where b.id a.id b select from t1 a w...
SQL EXISTS與IN的區別(2)
select from a where id in select id from b 以上查詢使用了in語句,in 只執行一次,它查出b表中的所有id欄位並快取起來.之後,檢查a表的id是否與b表中的id相等,如果相等則將a表的記錄加入結果集中,直到遍歷完a表的所有記錄.它的查詢過程類似於以下過程 ...
mysql的 和 的區別 和 的區別
他們之間的區別用最直接的話來說就是 相當於對資料 加上 雙引號,相當於直接顯示資料。1 對傳入的引數視為字串,也就是它會預編譯select from user where name 比如我傳乙個csdn,那麼傳過來就是select from user where name csdn 2 將不會將傳入...