mysql几种常见的连接方式

薄洪涛6年前数据库1422
内连接(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


相关文章

GROUP_CONCAT用法

GROUP_CONCAT用法

应用场景表A有一条数据,表B有3条数据,通过  A left join B 可以展示出3条数据,如图但是我想让name在一行显示SELECT A.id, GROUP_CONCAT(B.n...

CREATE TABLE 表名 AS SELECT 语句用法详解

新表不存在,创建新表1.创建新表并且携带数据create table new_table    as select *&...

mysql报错:1118 - Row size too large

mysql报错:1118 - Row size too large

前几天在建表的时候,有这么一个现象,因为我的表字段比较多(一个患者的体检表项目繁多,不要问我为什么不分表了),字段类型为varchar类型,结果保存的时候报了如下的错误原因:MySQL在建表的时候有个...

发表评论    

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