https://www.bilibili.com/video/BV1YW4y1q7Et?is_story_h5=false&share_from=ugc&share_medium=android&share_plat=android&share_source=WEIXIN&share_tag=s_i×tamp=1662093859&unique_k=ZANrjxM
①准备三个表。
订单表、快递表、物流记录表,关系如下:
一个订单有可能会被拆分为多个物流快递(当一个订单太大的时候,根据大小和重量选择不同的快递)
一个快递有多个物流记录。
②给三个表加上记录
left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录
right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
inner join(等值连接) 只返回两个表中连接字段相等的行
通俗话语区别:
Inner join 就是取两个表共有的行记录
Left join 就是取左表+共有
-这个结果给大家留下一个猜想,猜对结果大家就可以看出来两者的区别了。
上面的解释可能你觉得很简单,其实在工作中会没有这么简单的,例如当有3个或者3个以上的表进行连接的时候,使用不同的链接不知道你会不会迷糊。
①查找到有物流记录的所有订单信息、快递信息、物流记录。
-为什么第一条语句是错误的,第二条语句正确?结果我这边就不发上来了,我这边直接说结论:
第一条语句有两个left join会以
t1,t2表为主表,找出所有的记录,所以会显示出没有物流记录的所有的订单信息和快递信息。
第二条语句都是inner join会得到以最后的t3表行记录为准的记录,所以只会查出有物流记录信息的所有的信息。
②查找到订单2021年到2022的所有订单信息、快递信息、物流信息。
①如果有3个表连接的话,都是inner join 产生的结果是以最后一个表的记录决定的,所以只能查出最后一个表的全部信息,1,2表的没有相连接的id将会被淹没,无法找到相关的信息。
②使用left join是会保留1,2表的信息的。
①当多表连接需要1表的全部记录,则使用left join,不需要的话,则建议使用inner join。
②在工作中4个表以上的连接不建议这样使用,1方面是性能有问题,可能会使索引失效,2方面就是关联太紧密了,对后续的迁移可能会不良的影响。
最后
这是一道高频初级面试题,建议大家像我目录那样说,一方面体现你的基础知识,另一方面体现你在工作中实践过,有自己的体会,是值得加分的。
如果需要相关的上述的相关的sql语句脚本和文本稿件,欢迎关注“大宝宏说java”公众号,回复“内连接”关键字即可领取,如果在学习的过程中有什么疑问,欢迎发消息给我公众号后台哦,有消息必回复。