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
:
id | name | age |
---|---|---|
1 | Tom | 20 |
2 | Jack | 21 | |
3 | Mary | 19 |
4 | John | 22 |
5 | Jessica | 20 |
选课表 courses
:
id | course | student_id |
---|---|---|
101 | Math | 1 |
102 | English | 2 |
103 | Science | 3 |
现在我们来查询所有学生以及他们所选的课程:
SELECT students.name, courses.course
FROM students
LEFT JOIN courses ON students.id=courses.student_id;
该查询使用的是左外连接,返回以下结果:
name | course |
---|---|
Tom | Math |
Jack | English |
Mary | Science |
John | NULL |
Jessica | NULL |
因为 John 和 Jessica 没有选修课程,所以他们的 course
列中显示为 NULL 值。如果使用右外连接,则返回结果会以选课表为基础,而左侧表中没有与之关联的记录则同样显示为 NULL 值。