SQL复杂查询-除法实现-做题理解

复习时遇到的一个难点,理解了之后还是觉得做题太慢,所以自己想了一个觉得还比较高效的理解来做题。

首先,要用复杂查询来做的题都可以转换成包含两个否定的说法。
eg1:查询订购了所有产品的顾客的cid值
转换后:不存在一个产品用户没有订购。
eg2:查询被所有居住在New York的顾客订购的产品pid
转换后:不存在居住在New York的某位顾客没有订购的产品。

以eg1为例我们又可以把这两个否定给去掉,变成:存在一个产品用户订购了。
变成这个说法之后就很好用除法来做了
假设有一个orders表
用orders表去除orders表的pid列
显然如果一个用户买了至少某一种产品,那么做了除法之后,我们就可以找到这个用户。
理解这个主要是为了更快的套公式!

select…
where not exists
(select…where not exists(select…))

套公式的方法就是将上面推出来做除法的两个表分别套入第三个select和第二个select

而第一个select不用考虑除法,直接是题目要求查什么就直接写。

eg2去掉两个否定得到 居住在New York的某位顾客订购的某产品。
所以要带入的表就是 orders表 和 满足city=’New York’的customer表的cid列

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值