1. 程式人生 > >SQL關於IN和EXISTS的用法和區別的比較

SQL關於IN和EXISTS的用法和區別的比較

就是 註意 子查詢 post 如果 需要 nbsp style loop

1.exist,not exist一般都是與子查詢一起使用. In可以與子查詢一起使用,也可以直接in (a,b.....)。
2.exist會針對子查詢的表使用索引. not exist會對主子查詢都會使用索引. in與子查詢一起使用的時候,只能針對主查詢使用索引. not in則不會使用任何索引. 註意,一直以來認為exists比in效率高的說法是不準確的。

in 是把外表和內表作hash 連接,而exists是對外表作loop循環,每次loop循環再對內表進行查詢
IN 其實與等於相似,比如in(1,2) 就是 = 1 or = 2的一種簡單寫法,所以一般在元素少的時候使用IN,如果多的話就用exists
exists的用法跟in不一樣,一般都需要和子表進行關聯,而且關聯時,需要用索引,這樣就可以加快速度。

IN
確定給定的值是否與子查詢或列表中的值相匹配。

EXISTS
指定一個子查詢,檢測行的存在。

比較使用 EXISTS 和 IN 的查詢

exists()後面的子查詢被稱做相關子查詢 他是不返回列表的值的.只是返回一個ture或false的結果,其運行方式是先運行主查詢一次 再去子查詢裏查詢與其對應的結果 如果是ture則輸出,反之則不輸出.再根據主查詢中的每一行去子查詢裏去查詢.

in()後面的子查詢 是返回結果集的,換句話說執行次序和exists()不一樣.子查詢先產生結果集,然後主查詢再去結果集裏去找符合要求的字段列表去.符合要求的輸出,反之則不輸出.

SQL關於IN和EXISTS的用法和區別的比較