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) 

     
     
  • 相关阅读:
    RedissonConfProperty
    IdGenerator(雪花)
    Btrace和arthas地址
    SqlFilter
    AuthorityFilter
    111
    分布式数据库-杂记
    站点集群
    分布式精华文章
    高并发
  • 原文地址:https://www.cnblogs.com/1234abcd/p/5525417.html
Copyright © 2011-2022 走看看