一、什么是左连接(left join)和右连接(right join)
在MYSQL数据库中,根据连接时要提取的是那个表的全部记录,外连接可以分为左外连接(LEFT JOIN)和右外连接(RIGHT JOIN)两种类型 。
- 左外连接(LEFT JOIN):返回左表的全部记录,即使右表中没有匹配的记录。如果没有匹配的右表记录,则结果集中右表的字段将为NULL。
- 右外连接(RIGHT JOIN):返回右表的全部记录,即使左表中没有匹配的记录。如果没有匹配的左表记录,则结果集中左表的字段将为NULL。
二、左连接(left join)和右连接(right join)的用法
下面通过2个查询示例,讲解左连接(left join)和右连接(right join)在查询中的使用场景。
表1:学生信息登记表
表2:部分学生考试成绩表
1.左连接(left join)
我们使用左连接(left join)通过连接键“学号”将“学生信息登记表”和“部分学生考试成绩表”进行连接,最后输出查询结果。
#使用左连接,将“学生信息表”和“部分学生成绩表”进行连接,输出查询结果
select *
from 学籍信息 as x
left join 部分学生成绩 as y
on x.学号 = y.学号;
以上SQL查询使用左连接(left join),将“学生信息表”和“部分学生成绩表”进行连接,输出查询结果。
可以看到以上查询返回了左表“学籍信息”的全部记录和右表“部分学生成绩表”相匹配记录,同时也返回了右表没有匹配到的记录,右表没有匹配到的字段在结果集中显示NULL。
2.右连接(right join)
我们使用右连接(right join)通过连接键“学号”将“部分学生考试成绩表”和“学生信息登记表”进行连接,最后输出查询结果。
select *
from 部分学生成绩 as x
right join 学籍信息 as y
on x.学号 = y.学号;
以上SQL查询使用了右连接(right join),最后输出查询结果。
可以看到以上查询返回了右表 “学籍信息”的全部记录和左表“部分学生成绩”相匹配的记录,同时也返回了左表没有匹配到的记录,左表没有匹配到的字段在结果集中显示NULL。
实际上我们也可以通过调换连接的表来实现左外连接和右外连接的转换。