2024-06-11
学习
00
请注意,本文编写于 366 天前,最后修改于 196 天前,其中某些信息可能已经过时。

目录

左连接和右链接有什么区别
1. 左连接(LEFT JOIN)
示例:左连接
2. 右连接(RIGHT JOIN)
示例:右连接
3. 左连接和右连接的区别总结
4. 左连接和右连接的实际区别
总结:

左连接和右链接有什么区别

在SQL中,左连接(LEFT JOIN)右连接(RIGHT JOIN) 是两种常见的连接操作,通常用于从两个表中检索数据。它们的区别主要体现在结果集中的行如何被匹配以及哪个表的数据会被保留。

1. 左连接(LEFT JOIN)

  • 定义: 左连接(也叫左外连接)是将左表LEFT JOIN 中的第一个表)的所有记录与右表LEFT JOIN 中的第二个表)中符合连接条件的记录进行匹配。如果右表中没有符合条件的记录,左表中的记录仍然会出现在结果中,右表的相关字段则会显示为 NULL

  • 结果集: 左表的所有记录都会出现在结果集中,如果右表有符合条件的记录,则将右表的相关字段一起返回。如果右表没有匹配的记录,右表的字段为 NULL

  • 使用场景: 当你希望保留左表的所有数据,即使右表没有匹配数据时,也能显示左表的数据。

示例:左连接

假设有两个表:employees(员工表)和 departments(部门表)。

employees 表:

idnamedepartment_id
1Alice1
2Bob2
3Charlie3
4DavidNULL

departments 表:

iddepartment_name
1HR
2IT
3Finance

查询员工及其部门信息:

sql
SELECT e.id, e.name, d.department_name FROM employees e LEFT JOIN departments d ON e.department_id = d.id;

结果集:

idnamedepartment_name
1AliceHR
2BobIT
3CharlieFinance
4DavidNULL

如你所见,David 这位员工没有关联部门,因此 department_nameNULL

2. 右连接(RIGHT JOIN)

  • 定义: 右连接(也叫右外连接)与左连接相似,只不过它保留的是右表RIGHT JOIN 中的第二个表)的所有记录,并且会与左表RIGHT JOIN 中的第一个表)中符合连接条件的记录进行匹配。如果左表中没有符合条件的记录,右表中的记录仍然会出现在结果中,左表的相关字段则会显示为 NULL

  • 结果集: 右表的所有记录都会出现在结果集中,如果左表有符合条件的记录,则将左表的相关字段一起返回。如果左表没有匹配的记录,左表的字段为 NULL

  • 使用场景: 当你希望保留右表的所有数据,即使左表没有匹配数据时,也能显示右表的数据。

示例:右连接

继续使用 employeesdepartments 表。

sql
SELECT e.id, e.name, d.department_name FROM employees e RIGHT JOIN departments d ON e.department_id = d.id;

结果集:

idnamedepartment_name
1AliceHR
2BobIT
3CharlieFinance
NULLNULLNULL

注意,在右连接中,如果右表(departments)中的某些记录没有匹配到左表(employees)中的记录,那么左表的字段将会返回 NULL。例如,假如右表 departments 中有一个部门没有员工,那么结果集会显示该部门的相关信息,并且员工相关字段为 NULL

3. 左连接和右连接的区别总结

特性左连接(LEFT JOIN)右连接(RIGHT JOIN)
结果集保留左表(第一个表)的所有记录保留右表(第二个表)的所有记录
无匹配时表现如果右表没有匹配的记录,右表的字段为 NULL如果左表没有匹配的记录,左表的字段为 NULL
使用场景当你需要保留左表的所有数据当你需要保留右表的所有数据
查询行为查找左表所有数据,并与右表匹配查找右表所有数据,并与左表匹配

4. 左连接和右连接的实际区别

  • 语法上的差异: 左连接和右连接的最大区别在于结果集中保留的表的顺序。左连接会保留左表的所有记录,右连接会保留右表的所有记录。

  • 逻辑上的等价性: 其实,左连接和右连接是可以互相转换的。我们可以通过交换表的位置来将右连接转换为左连接,反之亦然。例如:

sql
-- 使用右连接 SELECT * FROM employees e RIGHT JOIN departments d ON e.department_id = d.id; -- 等价于使用左连接 SELECT * FROM departments d LEFT JOIN employees e ON e.department_id = d.id;

总结:

  • LEFT JOIN(左连接) 会返回左表中的所有记录,即使右表没有匹配的记录,右表的字段会显示为 NULL
  • RIGHT JOIN(右连接) 会返回右表中的所有记录,即使左表没有匹配的记录,左表的字段会显示为 NULL

本文作者:han

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!