SQL——(NOT) EXISTS 用法


SQL——EXISTS用法

如下:
表A
ID NAME  
1   A1
2   A2
3   A3

表B
ID AID NAME
1   1     B1
2   2     B2  
3   2     B3

表A和表B是1對多的關系 A.ID => B.AID

SELECT ID,NAME FROM A WHERE EXISTS (SELECT * FROM B WHERE A.ID=B.AID)

執行結果為

1 A1
2 A2

原因可以按照如下分析

SELECT ID,NAME FROM A WHERE EXISTS (SELECT * FROM B WHERE B.AID=)
--->SELECT * FROM B WHERE B.AID=1 有值返回(真),所以有數據;
SELECT ID,NAME FROM A WHERE EXISTS (SELECT * FROM B WHERE B.AID=2)
--->SELECT * FROM B WHERE B.AID=2 有值返回(真),所以有數據;
SELECT ID,NAME FROM A WHERE EXISTS (SELECT * FROM B WHERE B.AID=3)
--->SELECT * FROM B WHERE B.AID=3 無值返回(假),所以沒有數據。

NOT EXISTS 就是反過來

SELECT ID,NAME FROM A WHERE NOT EXIST (SELECT * FROM B WHERE A.ID=B.AID)

執行結果為

3  A3

 

 

重點:1.此處內表SELECT什么無所謂,不會影響外表的查詢結果(select 1);2.內表和外表必須有聯系(此處的聯系即是指A/外表的ID和B/內表的AID——A表的ID是B表的外碼)。

 

 

補充:如果查詢語句使用了NOT IN,那么內外表都進行全表掃描,沒有用到索引;
而NOT EXISTS的子查詢依然能用到表上的索引。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM