暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

大厂必考的Mysql知识点——join

聚数云海 2021-06-16
855

小明通过层层考核后,终于拿到了数据分析岗offer。激动之余,听说一些同学还在准备笔试,于是小明想跟大家分享一下,大厂到底会出什么样的笔试题?


笔试真题:通过订单ID,将下列两张表合并为一张表


表1:


com_table

表2:


cos_table


这时就要用到MySQL的join函数了:


join具有连接的作用,即当两个或者两个以上的表有关系时,需要用join来连接这些相关的表,用来处理或分析数据。




01

join的用法:连接


直接将两张表用join连接起来,看看会有什么样的结果:



  • join后的列名是两个表列名加起来的,可能会产生相同的列名,如“订单ID”

  • 先用表cos_teble中的一行数据和表com_table中的每一行数据不断的拼接,产生新的行;

  • 再用表cos_teble的第二行去和表com_table中的每一行数据拼接,以此类推;

  • 表cos_teble是10行,表com_table是3行,所以按照上面的规律会生成10*3 = 30行的新表;



02

on的用法:添加约束


一般我们join后的表,并不是我们想要的,这时,可以用ON 来加一些条件:


例如:

select * from cos_table join com_table on cos_table.订单ID = com_table.订单ID;


on后面的内容就是我们加的条件,我们想要两张表,订单ID这一列的数据相等的数据,这里注意一下,join后的表列名是有重复的,所以on后面的条件语句中我们要加上原来的表名。


此时:cos_table.订单ID = com_table.订单ID


所以执行以下条件:

select * from cos_table join com_table on cos_table.订单ID = com_table.订单ID;


在此之后,表将变为:



小提示:

当只有join时,其后面的on可以用where替换。



03

left join


1)先看看join和left join的区别:


  • left join必须有on;

  • left join会检查左边表的数据是否都包含在新生成的表中,若是:则和join一样;若不是:则用NULL和不包含的行组成新的行加入到新表中;


PS:如果不能理解上述语句,可以结合下面的例子帮助理解


我们先执行join:

 select * from cos_table join com_table; (join的详细语法之前有介绍过)


↑↑↑一共产生了30条数据


再执行left join:

select * from cos_table left join com_table on cos_table.订单ID = com_table.订单ID;


执行之后表格变为:

由于左边的表cos_table中的数据在join后,第三行没有在新表出现,left join会将没在新表出现的数据和Null作拼接,并作为新的行加进来。


2)如果将cos_table和com_table顺序换一下,执行: 


com_table left join

cos_table on com_table.订单ID = cos_table.订单ID ;


结果如下:

这个时候,左边的表是com_table,它的数据在新表中全都存在,但是没有在表cos_table匹配上的数据全部被Null填充。


通过这个例子,再去理解上面讲到的两者之间的区别,就可以得出:

left join左右两边的表是不能交换的,交换的话,意思会变;join左右两边的表可以交换,意思不变。



04

right join


right join的作用是检查右边表的数据是否都包含在新生成的表中。


若是:则和join没有区别;

若不是:则用Null和不包含的行组成新的行加入到新表中。


如果理解了left join,就会发现:

A right join B = B left join A


A right join B:是以B为基准;

B left join A:也是以B为基准。


今天关于join函数的讲解就到这里为止了,这道题你会做了吗?想要了解更多MySQL相关知识,获取相关课程资源,添加老师微信并回复【MySQL资料包】领取更多相关资料!👇

   



文章转载自聚数云海,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论