sql左外连接和右外连接的区别?
在 SQL 中,左外连接(Left Outer Join)和右外连接(Right Outer Join)是两种不同的连接方式,用于通过共同的列将两个或多个表连接起来。
左外连接(Left Outer Join):
- 左外连接返回左边表中的所有记录,以及符合连接条件的右边表中的匹配记录。
- 如果右边表中没有匹配的记录,则对应的列值将为 NULL。
- 左外连接语法:SELECT 列名 FROM 左表名 LEFT JOIN 右表名 ON 连接条件。
右外连接(Right Outer Join):
- 右外连接返回右边表中的所有记录,以及符合连接条件的左边表中的匹配记录。
- 如果左边表中没有匹配的记录,则对应的列值将为 NULL。
- 右外连接语法:SELECT 列名 FROM 左表名 RIGHT JOIN 右表名 ON 连接条件。
区别:
- 左外连接按照左表为主,返回左表中的所有记录,只包括符合连接条件的右表记录。
- 右外连接按照右表为主,返回右表中的所有记录,只包括符合连接条件的左表记录。
- 换句话说,左外连接保留左表的所有记录,右外连接保留右表的所有记录。
图片来源:网络
- 如果使用外连接,其中一个表中的记录没有匹配项,则返回的结果中对应的列值为 NULL。
需要注意的是,将左外连接和右外连接进行互转(将左表和右表位置互换),可以得到相同的结果,只是输出结果的顺序和表的顺序会有所不同。
要区别在于连接操作时,保留哪些表中的数据。
1. 左外连接(LEFT JOIN):
左外连接以左侧表为主表,并保留左侧表中所有满足连接条件的行。如果左侧表中的一个行在右侧表中没有匹配的行,那么结果集中的该行将显示为 NULL。
例如,假设有两个表:students 和 courses。students 表有如下数据
id
courses 表有如下数据:
id | course_
1 | Math
3 | English
执行以下左外连接查询:
SELECT students.id, students.name, courses.course_name
FROM students
LEFT JOIN courses
ON students.id = courses.id;
查询结果将显示:
id | name | cours
1 | Alice | Math
2 | Bob | NULL
可以看到,Alice 的 id 为 1 的行在 courses 表中有匹配的行,因此 Math 被显示。而 Bob 的 id 为 2 的行在 courses 表中没有匹配的行,因此显示为 NULL。
1. 右外连接(RIGHT JOIN):
右外连接以右侧表为主表,并保留右侧表中所有满足连接条件的行。如果右侧表中的一个行在左侧表中没有匹配的行,那么结果集中的该行将显示为 NULL。
假设我们用 students 和 courses 表进行右外连接:
SELECT students.id, students.name, courses.course_name
FROM students
RIGHT JOIN