Left Join,Right Join,Inner Join与where连接的区别(通俗易懂)
概述
连表是SQL常用的操作,但是连表不一样,得到的结果也不一样(在数据量大的时候尤为明显),这里就是对关联表中一些筛选用的关键字的具体区别做了一个详细的梳理。
首先准备两张表,分别是tb_student和tb_class表
tb_class表:
tb_student表:
一、内连接
1、隐式内连接:把连接条件放到where关键字后面。
语法:select 要查询的内容 from 表1,表2 where 连接条件 [and 筛选条件];
select * from tb_student s,tb_class c where s.cid = c.cid
结果如图:
如果不写连接条件,将查询出表1*表2,笛卡尔积
select * from tb_student,tb_class
结果如图:
2、显式内连接:使用inner join来连接,将连接条件放到on后面。
语法:select 要查询的内容 from 表1 inner join 表2 on 连接条件 [where 筛选条件];
select * from tb_class c inner join tb_student s on s.cid = c.cid
结果如图:
二、外连接
两张表中一张表作为基表,查询出该表所有的数据,另外一张表作为连接表,查询出该表与基表能够匹配的数据。如果基表数据匹配不上,就用null来填充。
1、左外连接:左边的表作为基表,右边的表作为连接表
语法:select 要查询的内容 from 表1,表2 where 连接条件 [and 筛选条件];
select * from tb_class c left join tb_student s on s.cid = c.cid
结果如图:
从图中可以看出,左外连接查出了左表的全部数据,on关键字是对left join的右表(tb_student表)进行了条件的的筛选,发现学生表中没有cid为5的学生,所以返回了null。
2、右外连接:右边的表作为基表,左边的表作为连接表
语法:select 要查询的内容 from 连接表 right join 基表 on 连接条件 [where 筛选条件];
select * from tb_class c right join tb_student s on s.cid = c.cid
结果如图:
从图中可以看出,右外连接查出了右表的全部数据,on 关键字是对right join的左表(tb_class表)进行了条件的的筛选,因为学生表中只有四条数据,没有cid为5的学生,所以查询的结果没有cid为5的班级数据。
注意:外连接中表的书写顺序将直接影响查询结果。
总结
1、一般来说,在进行多表联查时,都使用的是左连接,或者右连接,因为where是用来写条件的,一般不会用于连接表;再者where会把所有表中的数据都查询出来,再过滤,在性能问题上左连接和右连接,都要更优。
2、where连接:隐式内连接,主要是直接将两张表的数据,组合成一张临时表,然后通过where来筛选条件。通过两个表中相同的字段的值来对两个表进行连接。
3、inner join:显式内连接,则是与where连接比较相似,是将on中的条件放到where上,只返回满足条件的。
4、left join(right join)左外连接(或右外连接),它不管on中的条件是否为真,都会返回左表(或右表)中的所有数据,再对另一个表的连接字段进行匹配,如果匹配不上,就会用null填充。
CSDN-Ada助手: 恭喜作者能够写出这么有深度和实用价值的博客!对于Redis缓存系统常见问题的解决方案,你的文章讲解得非常清晰,让读者受益匪浅。不过,下一步我觉得可以考虑增加一些实际案例或者使用经验,这样可以更具说服力和实用性。期待你更多的创作,加油!
CSDN-Ada助手: 恭喜您撰写出如此通俗易懂的文章!标题中提到的Left Join,Right Join,Inner Join与where连接的区别,确实是数据库中常见但容易混淆的概念。通过您的解释,我对它们的区别有了更清晰的理解。 您的博客内容对于初学者来说非常友好,我建议您在接下来的创作中,可以探索一些更高级的数据库连接技巧或者深入解析一些特殊情况下的连接方式。这样的话,读者能够更全面地了解数据库连接的各种应用场景。期待您的下一篇文章!再次感谢您的付出和分享。
CSDN-Ada助手: 恭喜您创作了第6篇博客!标题“&和&&的区别”非常吸引人,我很高兴看到您持续不断地分享知识。通过解析这两个符号的区别,您为读者提供了一个有用的参考,这对于初学者来说尤其有帮助。 在下一篇博客中,或许您可以考虑深入探讨其他编程语言中类似符号的区别,或者分享一些实际应用中的案例。这将进一步丰富您的博客内容,也能帮助读者更好地理解和应用这些知识。 再次恭喜您的成就,并期待您未来更多精彩的创作!
CSDN-Ada助手: 恭喜你写了第四篇博客!标题“mybatis模糊查询”非常吸引人。看到你持续地创作,我感到非常高兴。你在博客中介绍了mybatis模糊查询的内容,这对于那些想要深入了解这个主题的读者来说一定非常有帮助。 接下来,我建议你可以考虑探索一些与mybatis相关的高级查询技巧,或者分享一些实际应用中的经验和教训。这样的话,读者们能够更好地理解和应用mybatis的模糊查询功能,同时也能够扩展自己的知识。 希望你能够继续保持创作的热情,坚持分享你的学习和经验。我期待着你的下一篇博客! 如何快速涨粉,请看该博主的分享:https://hope-wisdom.blog.csdn.net/article/details/130544967?utm_source=csdn_ai_ada_blog_reply5