在mysql中,连接的函数有:inner join,left join,right join等等。

其中,inner join就是返回两个表连接的交集。即:只有当两个表都存在的数据才会被返回。为了测试其中一个表存在重复数据时inner join返回的结果,创建两个表格:demo1(上),demo2(下)

 

SELECT * FROM data.demo1 as d1
join data.demo2 as d2 on d1.class=d2.class

将demo1与demo2通过class进行内连接,并返回结果:

 

从结果中可以看出,由于class98在两个表中都同时出现了,因此class98的数据就会被返回。又由于在demo1中class98的数据由两条(即小明与小红),而在demo2中class98的数据只有一条(即小明) ,而mysql中的处理方式是将demo1中class98的每一条数据都与demo2中class98进行连接并返回。(其中clss99中的重复数据也是一样的道理)

当使用left join进行连接时,将左表的数据全部保留,右表与左表相同的数据保留,左表拥有而右表不拥有的数据用null进行填充。而left join处理重复数据返回的结果如下:

SELECT * FROM data.demo1 as d1
left join data.demo2 as d2 on d1.class=d2.class

 

从结果中可以看出,左表的数据全部保留,并且class97作为demo1独有而demo2没有的数据以null进行填充;而在demo1重复出现两次的class98数据与demo2中出现一次的class98数据也都进行了一次连接。

总结:无论是使用inner join还是left join进行连接时,遇到重复数据时(两个表中都必须同时拥有该数据,只是在一个表或者两个表中重复出现)都是将其一一匹配才返回结果。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐