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) 
    

      

  • 相关阅读:
    week2 About BuildTools
    week2 GIT and Version Control
    学习RFC相关知识以及心得
    Week 1 Functional Language
    8.C语言_中文字符存储问题
    7.C语言_字符与字符串
    6.C语言_整数类型
    4.C语言_变量与参数的内存布局
    3.C语言_变量
    2.C语言_参数传递与返回值
  • 原文地址:https://www.cnblogs.com/cyjch/p/2413525.html
Copyright © 2011-2022 走看看