两层子查询 外表字段获取不到_数据分析|SQL子查询知识要点

46e248874430bec70cff0cc1bd600fd4.png

按照SQL子查询执行的次数,我们可以将子查询分成关联子查询和非关联版子查询。

其中,非关联子查询与主查询的执行无关,只需要执行一次即可;而关联子查询,则需要将主查询的字段值传入子查询中进行关联查询。

同时,在子查询中你可能会使用到EXISTS、IN、ANY、ALL和SOME等关键字。


首先,在某些情况下使用EXISTS和IN可以得到相同的效果,具体使用哪个执行效率更高,则需要看外表和内表哪个表更大。IN表是外边和内表进行hash连接,是先执行子查询;EXISTS是对外表进行循环,然后在内表进行查询。因此如果外表数据量小,也用EXISTS;如果外表数据量大,则用IN。

IN有一个缺陷是不能判断NULL,因此如果字段存在NULL值,因为最好使用NOT EXISTS。


其次,IN、ANY、ALL、SOME这些关键字是用于集合比较的,其中SOME是ANY的别名,当我们使用ANY或ALL的时候,一定要使用比较操作符。


最后,子查询可以作为计算字段放在SELECT后面,也就是把子查询的结果作为主查询的列。


d494be779087ec0fa286ee2ac2e5583d.png

总结

在SQL中,子查询的使用大大增强了SELECT查询的能力。因为很多时候查询需要从结果集中获取数据,或者需要从同一个表中先计算得出一个数据结果,然后与这个数据结果(可能是某个标量,也可能是某个集合)进行比较。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值