mysql外连接查询教程

MySQL 中,外连接查询(Outer Join)用于结合两个或多个表中的所有行,包括其中没有匹配的行。外连接分为左外连接、右外连接和全外连接三种类型。

左外连接(Left Outer Join)返回左侧表中所有记录以及右侧表中与之关联的记录。如果右表中没有与之关联的记录,则返回 NULL 值。

左外连接语法如下所示:

SELECT column_name(s)
FROM table1
LEFT JOIN table2 ON table1.column_name = table2.column_name;

右外连接(Right Outer Join)与左外连接类似,不过是将左右表交换了位置,返回结果也以右侧表为基础。如果左侧表中没有与之关联的记录,则返回 NULL 值。

右外连接语法如下所示:

SELECT column_name(s)
FROM table1
RIGHT JOIN table2 ON table1.column_name = table2.column_name;

全外连接(Full Outer Join)则返回左右两个表中所有的记录,如果某张表中没有与之关联的记录,则返回 NULL 值。

全外连接语法如下所示:

SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2 ON table1.column_name = table2.column_name;

需要注意的是,在 MySQL 中并不支持全外连接,需要通过左右外连接的组合来实现。

举例来说,假设有以下两个表,一个是学生表 students,一个是选课表 courses

学生表 students

idnameage
1Tom20
2 | Jack21
3Mary19
4John22
5Jessica20

选课表 courses

idcoursestudent_id
101Math1
102English2
103Science3

现在我们来查询所有学生以及他们所选的课程:

SELECT students.name, courses.course
FROM students
LEFT JOIN courses ON students.id=courses.student_id;

该查询使用的是左外连接,返回以下结果:

namecourse
TomMath
JackEnglish
MaryScience
JohnNULL
JessicaNULL

因为 John 和 Jessica 没有选修课程,所以他们的 course 列中显示为 NULL 值。如果使用右外连接,则返回结果会以选课表为基础,而左侧表中没有与之关联的记录则同样显示为 NULL 值。