in和exists的区别以及exists和distinct去重的区别?

本文探讨了SQL中in、exists的区别以及exists与distinct在去重方面的不同。in适用于子查询结果集小的情况,exists则在主查询记录少时更优。exists对外层表进行循环,而in先执行子查询。对于null值处理,两者实际效果相同。在去重方面,exists对子查询结果去重,而非对主表去重。举例并提供了测试用例,揭示了exists在效率上优于distinct。作者鼓励读者分享更多见解。
摘要由CSDN通过智能技术生成

小编相信大家都知道in和exists的区别:
1、运用情况不同
sql中in适用于子查询得出的结果集记录较少,主查询中的表较大且又有索引的表,。sql中exist适用于外层的主查询记录较少,子查询中的表大,又有索引的时候。

2、驱动顺序不同
IN是先查询子查询的表,然后将内表和外表做一个笛卡尔积,然后按照条件进行筛选。exists是以外层表为驱动表,先被访问。

3、底层原理不同
in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。

但是我昨天看到有位博主讲到还有一个区别就是对null值处理不同:IN不对NULL进行处理,exists会对NULL值进行处理。这个我没有听过,所以本着好奇心就去测试了一下,我发现没有什么不同,查询出来的数据也是一样。至于其他的小编就不在这里一一测试的,有兴趣的小伙伴自己私下测试一下。

先创建两张表stu存放学生的编号,姓名以及班级
in和exists的区别以及exists和distinct去重的区别?
grade表存放学生的编号以及分数。
in和exists的区别以及exists和distinct去重的区别?
代码如下:
selec

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值