请选择 进入手机版 | 继续访问电脑版

SQL Where not exists双重否定例子分析

[复制链接]
科达工艺 发表于 2021-1-2 19:47:00 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
以下面的例子来说吧
有顾客表customers(CNO, CNAME, SEX, AGE),
书籍表books(BNO,BNAME, PNO, PRICE),
出书社表publisher(PNO, PUBNAME,ADDRESS),
购买表buy(CNO,BNO, DATE)。
先要查找所有顾客(谁购买了所有清华社出书出书的书)的编号。
SQL语句:
         select CNO
         from customers
          where not exists(
                         select *
                         from book
                         where PNO in(select PNO
                                                  from publisher
                                                  where PUBNAME = ‘清华大学出书社’)
                                                  and
                                                  not exists
                                                  (select *
                                                  from buy
                                                  where BNO = books.BNO
                                                  and CNO = customers.CNO))


先看
                 not exists
                 select *
                 from buy
                 where BNO = books.BNO
                 and CNO = customers.CNO
可以这样明白,它体现的意思:选取所有买书的人。再加上not exists呢?就是选取没有买书的人 ,没有买什么样的书呢?
接着看
select *
from book
where PNO in(select PNO
from publisher
where PUBNAME = ‘清华大学出书社’)

这个select意思是啥?选取所有清华大学出书社出书的书,
and以后呢 就变成了:“没有买所有清华大学出书社出书的书的人”,外面又加了一个 where not exists,这样的情况不存在,那不就成了:“有买所有清华大学出书社出书的书的人 ” 了吗?,然后再把他们的编号选出来:
         select CNO
         from customers
我这里的想法是先假设题目要求的设这个人一定存在

来源:https://blog.csdn.net/weixin_43275631/article/details/112061685
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )