當前位置:首頁 » 編程語言 » sql中的exists和in的區別
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql中的exists和in的區別

發布時間: 2023-03-08 05:06:03

⑴ 在sql語句中,in和exist的區別是什麼

in是把外表和內表作hash連接,而exists是對外表作loop循環。

⑵ SQL關於IN和EXISTS的區別

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

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

比較使用 EXISTS 和 IN 的查詢

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

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

⑶ sql 中的in 和exists區別

in和exists在功能上本質沒有區別,唯一的區別就在於性能。也就是說同樣的sql你用那個執行效率高的問題。

其實說簡單點就是exists用到了關聯,而in是在一個大的數據及合理篩選,這么說性能的優劣你就很明白了吧。關聯的速度是要大於篩選的,所以你只要能用exists就別用in,這是寫出好的sql語句的基本規則。

exists是查詢是否存在,它後邊跟的語句是查詢*還是直接寫個1,效果都一樣,比如你看到的sql的例子,我把*改成1,結果都一樣的。

select sno,sname,sdept
from student s1
where exists
(select 1 --*
from student s2
where s2.dept=s1.depe
and s2.name='小劉');
比如說這個例子學生表被賦予了兩個別名s1和s2
語句中要求dept和depe相等,我把上邊的語句改一下你可能就明白他的意思了:
select sno,sname,sdept
from student s1 ,student s2
where s1.dept =s2.depe
and s1.name = '小劉';
語句就是為了要看出student表中某兩行或者多行之間的關系,所以要對自己關聯,你仔細看一下你所面對的student表的每一列,就可能看明白了。

記住sql不要從技術上去理解,你就直接把它的功能用漢字表達出來,然後去理解就行了,跟我們說話時一個樣的:
從表student中找到dept和(student表中)depe相同的名字叫小劉的學生

⑷ SQL中IN和EXISTS用法的區別

exists是用來判斷是否存在的,當exists(查詢)中的查詢存在結果時則返回真,否則返回假。not exists則相反。
exists做為where 條件時,是先對where 前的主查詢詢進行查詢,然後用主查詢的結果一個一個的代入exists的查詢進行判斷,如果為真則輸出當前這一條主查詢的結果,否則不輸出。
in和exists
in 是把外表和內表作hash 連接,而exists是對外表作loop循環,每次loop循環再對內表進行查詢。一直以來認為exists比in效率高的說法是不準確的。 如果查詢的兩個表大小相當,那麼用in和exists差別不大。
如果兩個表中一個較小,一個是大表,則子查詢表大的用exists,子查詢表小的用in