zoukankan      html  css  js  c++  java
  • 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) 

     
     
  • 相关阅读:
    深入理解ASP.NET Core依赖注入
    Docker Swarm 从入门到放弃
    Asp.net Core全局异常监控和记录日志
    NServiceBus+RabbitMQ开发分布式应用
    NServiceBus+Saga开发分布式应用
    使用NServiceBus开发分布式应用
    springboot自动配置原理
    SpringMVC 源码解析
    instruments symbol name 不显示函数名!
    ld: framework not found FileProvider for architecture arm64
  • 原文地址:https://www.cnblogs.com/1234abcd/p/5525417.html
Copyright © 2011-2022 走看看