SQL 语句中 exists和not exists的用法

Posted 浪迹天涯芳草

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL 语句中 exists和not exists的用法相关的知识,希望对你有一定的参考价值。

exists       (sql       返回结果集,为真)   
not       exists       (sql       不返回结果集,为真) 
如下: 
表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   EXIST   (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=1) 
---> 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 
=========================================================================== 
EXISTS   =   IN,意思相同不过语法上有点点区别,好像使用IN效率要差点,应该是不会执行索引的原因 
SELECT   ID,NAME   FROM   A    WHERE ID   IN   (SELECT   AID   FROM   B) 

NOT   EXISTS   =   NOT   IN   ,意思相同不过语法上有点点区别 
SELECT   ID,NAME   FROM   A   WHERE ID NOT   IN   (SELECT   AID   FROM   B) 

 
 

以上是关于SQL 语句中 exists和not exists的用法的主要内容,如果未能解决你的问题,请参考以下文章

Exists 和Not Exists使用

oracle_not exists和not in的用法和区别

SQL语句中exists/not exists的用法分析

oracle中的exists 和not exists 用法详解

关于SQL语句中exists与not exists的问题

sql语句学习(NOT EXISTS 和 NOT IN )