• 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) 

     
     
  • 相关阅读:
    左边菜单导航
    css3实现轮播
    js-统计选项个数
    空间评论。回复。点赞功能
    简单的购物车功能
    字符串常用的几种方法
    React,js实现分页的案列
    python2的cgi程序
    开发环境和工具
    github入门
  • 原文地址:https://www.cnblogs.com/1234abcd/p/5525417.html
Copyright © 2020-2023  润新知