mysql 的左链接,右链接,内链接

mysql进行连表查询的时候。可以用where 和jion on的两种连接方式。连表查询的关键在于消除笛卡儿积。在对两张进行连接的时候,有的时候数据数量并不能完全对应。如果在连接的时候没用使用left或者right等连接字时,我们默认选择的是内连接(where连接的时候也是内链接)。何为内链接,我们可以举个例子,比如现在我们手中有A,B两张表,两张表是有关联的,

第一张为表A sys_class ,存储班级代码classid和班级的名称。第二张为表B sys_mid,存储关联代码selid,学生的代码stuid,班级代码classid,和成绩score,表二的外键classid就是表一的id。

在我们进行连表查询的时候,通常的写法就是将sys_class的id与sys_mid的classid相连。sys_class a join sys_ mid b on a.id = b.classid。这样我们就可以消除笛卡儿积了。但是这样会产生一个问题,当我们这样进行连表查询。查询没门课的平均成绩的时候,并不能得到四条返回值,而是只有三条

selcet a.name,avg(score) from sys_calss a join on sys_mid b on a.id = b.classid group by a.name;

原因就在于这种方式是内链接,即把两张表的相同的集合进行连接,也就是a.id与b.classid共有的1,2,3进行连接,而不是1,2,3,4。

那么我们怎么才能得到4那,在具体的这一条语句就算在 join前面加一个 left 意思是向左边的表链接,即左边的表的数据全部获取,如果后面的表没有对应的数值则使用空值进行补足。

selcet a.name,avg(score) from sys_calss a left join on sys_mid b on a.id = b.classid group by a.name;

如果a,b两张表的位置进行颠倒,则使用右链接

selcet a.name,avg(score) from sys_calss a right join on sys_mid b on a.id = b.classid group by a.name;
原文地址:https://www.cnblogs.com/Shirou20000/p/7852464.html