小明通过层层考核后,终于拿到了数据分析岗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资料包】领取更多相关资料!👇









