zoukankan      html  css  js  c++  java
  • sql 中(exists) (in) (not exists) (not in)

    select name from students where sex='男' and score exists(select 1 from grade where)

    exists这个条件就算成立了  返回的字段始终为1  若改为select 2 from grade 则返回字段2

    exists子句不在乎返回什么  在乎是不是有结果集返回

    exists和in最大的区别在于in引导的子句只能返回一个字段,exists返回的是一个结果集

    not exists和not in 是exists和in的对立面

    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 EXISTS (SELECT * FROM B WHERE A.ID=B.AID)
    执行结果为
    1 A1
    2 A2

    NOT EXISTS 就是反过来
    SELECT ID,NAME FROM A WHERE NOT EXIST (SELECT * FROM B WHERE A.ID=B.AID)

    执行结果为
    3 A3

    exists和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)

    下面再copy一个栗子

    Id  Name  Class Count  Date

     1   苹果    水果    10     2011-7-1

     1   桔子    水果    20     2011-7-2

     1   香蕉    水果    15     2011-7-3

     2   白菜    蔬菜    12     2011-7-1

     2   青菜    蔬菜    19     2011-7-2

    如果想要得到下面的结果:(Id唯一,Date选最近的一次)

    1   香蕉    水果    15     2011-7-3

    2   青菜    蔬菜    19     2011-7-2

    正确的SQL语句是:

    SELECT Id, Name, Class, Count, Date
    FROM table t
    WHERE (NOT EXISTS
              (SELECT Id, Name, Class, Count, Date FROM table 
             WHERE Id = t.Id AND Date > t.Date))

    如果用distinct,得不到这个结果, 因为distinct是作用与所有列的

    还有一种

    select id,name,class,count,date from table t where (date=(select max(date) from table where id=t.id))

  • 相关阅读:
    Python 面向对象编程
    snmp获取交换机端口和对应ip
    python IPy
    Django F()与Q()函数
    装饰器使用
    log日志信息查看
    shell简单入门
    gunicorn开启、关闭和重启
    CF1453B
    ACWing845 八数码(BFS,全排列hash)
  • 原文地址:https://www.cnblogs.com/jiangyou-lz/p/6526486.html
Copyright © 2011-2022 走看看