mysql内连接特点_Mysql----左连接、右连接、内连接、全连接的区别

最近,突然想起来数据库有好些时间没用到,所以,想把数据库有关的知识回顾一下,所以接下来这个月,基本上会以数据库的帖子来写为主,首先,很多同学都会有个错觉,觉得学习数据库会sql语句的增删改查就够了,其实,这仅仅是片面的认知,掌握了这些还远远不够,sql是你作为谋求生计的基本功,不会也得会,但是,要想变得优秀,还得学习更多的,比如:存储器、索引、事务等等。今天先和大家聊聊面试时技术官常会问你的:你说说看左连接与右连接以及全连接的区别,这个问题不管你是面试开发岗、测试岗甚至是产品岗,都会问到,接下来的慢慢看,就当回顾一下旧知识

在具体的介绍之前,先准备两张表,拿我自己的举例:test001(看作左表) 、  test002(看作右表)

e264f50381ed63f6df63b13121c53767.png

0c1c72c22c4a81887af9542ab2a6784e.png

1.内连接

关键字:inner join

sql语句:select*  from  table_left(表名)   inner join table_right(表名)    on   table_left.id  = table_right.id

注释说明:结合两张表的记录,返回相关的查询结果,返回的是两个表的交集部分(即阴影部分),见下图

52c7dc9149c8334ebef1164bfce9d281.png

用我刚刚上面举例的两张表查询一下:SELECT* FROM test001 INNER JOIN test002 ON test001.id=test002.id

ca6e4955043fdbf733be756614646091.png

两张表都有主键id,内连接的查询就是找出相同的主键以及主键附带的字段信息,这里咱们可以把sql再改进一下,让查询结果看起来不是那么累赘

sql语句 :   SELECT test001.id AS ID ,test001.username,test002.job FROM test001 INNER JOIN test002 ON test001.id=test002.id

4a3049f302fcfc4bb38bcdb8029d918d.png

2.左连接

关键字:left join

sql语句:select*  from  table_left(表名)  left join table_right(表名)    on   table_left.id  = table_right.id

注释说明:left join 是left outer join 的简写,全称其实是左外连接,属于外连接的一种,左连接查询,左表的信息全部展示出来,右表只会展示符合搜索条件的信息,不足的地方记为NULL

52fb9030c0c543e75e31e205adf6b9c2.png

同样的,用我刚刚最上面准备好的两张表查询一下:SELECT test001.id AS ID ,test001.username,test002.job FROM test001 LEFT JOIN test002 ON test001.id=test002.id

f82e1463c4cc495748dbc5fb31b79587.png

3.右连接

关键字:right join

sql语句:select*  from  table_left(表名)   right join table_right(表名)    on   table_left.id  = table_right.id

注释说明:right join 是right outer join 的简写,全称是右外连接,也属于外连接的一种,右连接查询,右表的信息全部展示出来,左表只会展示符合搜索条件的信息,不足的地方记为NULL

7161fdc09c62883d6b3668a729665a2f.png

如出一辙,用我刚刚最上面准备好的两张表查询一下:SELECT test002.id AS ID ,test001.username,test002.job FROM test001 RIGHT JOIN test002 ON test001.id=test002.id

c23d995b573f9977405507dafa340c87.png

看上图的右连接查询结果:右表的信息都有,左表的信息,有的就展示,没有的有用NULL表示,很容易区别

4.全连接

关键字:union / union all

sql语句:(select colum1,colum2,colum3... from  table_left) union (select colum1,colum2,colum3... from  table_right)

(select colum1,colum2,colum3... from  table_left) union all (select colum1,colum2,colum3... from  table_right)

af9d23c191c41549c4cf3ca56670183e.png

全连接:实际上就是把两张表合并,不管有的没的,都先给整上来。

注意事项:①用union 时,完全相等的行,将会被合并,由于合并比较耗时,一般不直接使用 union 进行合并;通常采用union all 进行合并;

②被union 连接的sql 子句,单个子句中不用写order by ,因为不会有排序的效果。但可以对最终的结果集进行排序;

(select  colum1,colum2....from A order by id) union all (select  colum1,colum2... from B order by id); //没有排序效果

(select colum1,colum2... from A ) union all (select colum1,colum2... from B ) order by id; //有排序效果

同样的,我用最开始最上面准备的两张表,来进行全连接合并

09421e87a632c2fb4997072c95d6d50d.png

查询结果看上图:左表的字段信息和右表的字段信息都全部显示,如果你想进行id排序也可以,加个order by id

(SELECT test001.id,test001.username FROM test001)UNION ALL (SELECT test002.id,test002.job FROM test002) ORDER BY id

e9b008b7c2d81001570def9566fe883f.png

友情提示:union会自动将完全重复的数据去除掉;union all会保留那些重复的数据;所以,建议大家合理使用,根据自己的需求进行sql查询

本文注重原创,本着资源共享的原则,如若需要转载,请注明出处:https://www.cnblogs.com/xj-excellent/p/13292291.html,文中如果有不对的地方请广大网友指出,可直接留言评论,我们一起共勉,共同进步。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值