?
問題:查詢學過編號為"01"并且也學過編號為"02"的課程的同學的信息
--方法1
select Student.* from Student , SC where Student.S# = SC.S# and SC.C# = '01' and exists (Select 1 from SC SC_2 where SC_2.S# = SC.S# and SC_2.C# = '02') order by Student.S#
?
EXISTS用于檢查子查詢是否至少會返回一行數據,該子查詢實際上并不返回任何數據,而是返回值True或False
?
例表A:TableIn | 例表B:TableEx |
![]() |
?
(二). 比較使用 EXISTS 和 IN 的查詢。注意兩個查詢返回相同的結果。
select * from TableIn where exists(select BID from TableEx where BNAME=TableIn.ANAME)
select * from TableIn where ANAME in(select BNAME from TableEx)
(三). 比較使用 EXISTS 和 = ANY 的查詢。注意兩個查詢返回相同的結果。
select * from TableIn where exists(select BID from TableEx where BNAME=TableIn.ANAME)
select * from TableIn where ANAME=ANY(select BNAME from TableEx)
NOT EXISTS 的作用與 EXISTS 正好相反。如果子查詢沒有返回行,則滿足了 NOT EXISTS 中的 WHERE 子句。
?
一種通俗的可以理解為 :將外查詢表的每一行,代入內查詢作為檢驗,如果內查詢返回的結果取非空值,則EXISTS子句返回TRUE,這一行行可作為外查詢的結果行,否則不能作為結果。
?
EXISTS與IN的使用效率的問題, 通常情況下采用exists要比in效率高,因為IN不走索引 ,但要看實際情況具體使用:
IN適合于外表大而內表小的情況;EXISTS適合于外表小而內表大的情況 。
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
