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 值。






 苏公网安备32021302001419号
苏公网安备32021302001419号