in和exists的区别以及exists和distinct去重的区别?
小编相信大家都知道in和exists的区别: 1、运用情况不同 sql中in适用于子查询得出的结果集记录较少,主查询中的表较大且又有索引的表,。sql中exist适用于外层的主查询记录较少,子查询中的表大,又有索引的时候。 2、驱动顺序不同 IN是先查询子查询的表,然后将内表和外表做一个笛卡尔积,然后按照条件进行筛选。exists是以外层表为驱动表,先被访问。 3、底层原理不同 in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。 但是我昨天看到有位博主讲到还有一个区别就是对null值处理不同:IN不对NULL进行处理,exists会对NULL值进行处理。这个我没有听过,所以本着好奇心就去测试了一下,我发现没有什么不同,查询出来的数据也是一样。至于其他的小编就不在这里一一测试的,有兴趣的小伙伴自己私下测试一下。 先创建两张表stu存放学生的编号,姓名以及班级 grade表存放学生的编号以及分数。 代码如下: 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