码农日记

薄洪涛的个人博客

mysql几种常见的连接方式

内连接(inner join)

从两张表中取出所有记录做笛卡尔积;利用匹配条件进行匹配;如果内连接没有条件,那么其实就是交叉连接,这是我们应该避免的

clipboard.png

775005-20180917164533997-1623997790.gif

交叉连接

从两张表中取出所有记录做笛卡尔积,所有的结果都会进行保留;记录数 = 第一张表记录数 * 第二张表记录数;字段数 = 第一张表字段数 +  第二张表字段数(笛卡尔积),这里我们看到查询出来的记录数为16条

clipboard.png


外连接
按照某一张表作为主表(表中所有记录在最后都会保留),根据条件去连接另外一张表,从而得到目标数据
外连接分为两种:左外连接left outer join|left join),右外连接right outer join|left join),写sql时可省略outer,直接写left join,right join
左外连接(left join)
确定主表,这里的order就是主表,左外连接就是拿主表的每一条记录,按照条件去匹配从表的每一条记录,如果满足匹配条件则保留;如果主表记录在从表中一条都没有匹配成功,那么也要保留该主表记录:从表对应的字段值都为NULL,可以看到主表userid为8的订单记录,找不到user表中的对应,所以对应的从表记录字段设置为NULL

clipboard.png

775005-20180917164714732-2096479565.gif

右外连接(right join)
和右外连接类似,这里的user就是主表,右外连接就是拿主表的每一条记录,按照条件去匹配从表的每一条记录,如果满足匹配条件则保留;如果主表记录在从表中一条都没有匹配成功,那么也要保留该主表记录:从表对应的字段值都未NULL,可以看到,user_name为bob和kitty的用户均没有对应的order记录,所以返回NULL

clipboard.png

775005-20180917164753527-12009198.gif

总结
左连接:主表 left join 从表 on 连接条件
右连接:从表 right join 主表 on连接条件
关于左连接和右连接总结性的一句话:
左连接where只影向右表,右连接where只影响左表
全连接

mysql不支持全连接,但是我们可以通过其他关键词组合起来完成全连接查询(其实全连接的数据就是左外连接和右外连接的集合),这里的意思就是获取所有的人,所有的订单,及关联数据

clipboard.png

775005-20180917164847755-1188439905.gif


发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Powered By Z-BlogPHP 1.7.3

版权所有 | 转载请标明出处