in和exists的区别以及exists和distinct去重的区别?
admin
2023-02-07 09:20:02
0次

小编相信大家都知道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去重的区别?
代码如下:
select from stu t1 where exists (select from grade t2 where t1.stuno = t2.stuno) order by t1.stuno;

select from stu t1 where t1.stuno in (select t2.stuno from grade t2 where t1.stuno = t2.stuno) order by t1.stuno;
查询结果是一样的,如下:
in和exists的区别以及exists和distinct去重的区别?
在这里注意两点:
1、sql中查询的字段均为stu表中的字段,不能写为:
select t2.
from stu t1 where t1.stuno in (select t2.stuno from grade t2 where t1.stuno = t2.stuno) order by t1.stuno;否则会报错t2.标示符无效。
2、in是单字段查询,所以子查询中一定要注意!不能写为:
select
from stu t1 where t1.stuno in (select * from grade t2 where t1.stuno = t2.stuno) order by t1.stuno;否则会报错值过多。

如果哪位小伙伴有不同的见解,欢迎给小编留言,小编好及时纠正,谢谢!

接下来讨论一下exists和distinct去重:
代码如下,id唯一:
select from stu t1 where exists (select from grade t2 where t1.stuno = t2.stuno) order by t1.stuno;
查询出的数据结果如下图:
in和exists的区别以及exists和distinct去重的区别?
我当时就一直在这里困扰,exists不是有去重的效果吗?为什么数据里id还是有重复数据出现,后来小编一直做实验测试发现,查询出的数据好像是先满足子查询中的where条件之后,然后对子查询中的数据去重,并不是对主表去重,最后返回符合数据的主表中的数据。后来就根据这个发现多做了一个测试,发现还真是这样。
还可以用一下sql代码替换:
select t1.* from stu t1,(select distinct a.stuno from grade a) t2 where t1.stuno = t2.stuno order by t1.stuno;
相信大家通过这两条代码发现通过distinct不能直接实现exists上面查询的效果!exists的效率会更高:
以下exists的解释计划窗口截图:
in和exists的区别以及exists和distinct去重的区别?
以下distinct的解释计划窗口截图:
in和exists的区别以及exists和distinct去重的区别?

所以小编今天整理一下,也希望更多网友不要跟我一样再犯傻了,浪费时间不说,还一直有一个错误的理解!
大家还有什么更好的想法欢迎给小编留言!

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...