文章目录
概要
MySQL 中的内连接(INNER JOIN)、左连接(LEFT JOIN 或 LEFT OUTER JOIN)和右连接(RIGHT JOIN 或 RIGHT OUTER JOIN)是处理多个表之间关系的重要工具。这些连接类型决定了如何从相关表中检索数据以及如何处理不匹配的行。以下是它们之间的区别和示例:
区别及示例
1. 内连接(INNER JOIN)
- 定义:返回两个表中都存在匹配行的结果集。如果某行在其中一个表中没有匹配的行,则不会出现在结果集中。
- 示例:假设我们有两个表 employees 和 departments。
employees 表:
id | name | department_id |
---|---|---|
1 | Alice | 1 |
2 | Bob | 2 |
3 | Carol | 3 |
departments 表:
id | name |
---|---|
1 | HR |
2 | Engineering |
使用内连接查询所有有对应部门的员工:
SELECT employees.name, departments.name AS department_name
FROM employees
INNER JOIN departments ON employees.department_id = departments.id;
- 结果:
name | department_name |
---|---|
Alice | HR |
Bob | Engineering |
注意:Carol 没有出现在结果集中,因为她的 department_id 在 departments 表中没有对应的行。
2. 左连接(LEFT JOIN 或 LEFT OUTER JOIN)
- 定义:返回左表中的所有行,以及右表中匹配的行。如果左表中的某行在右表中没有匹配的行,则结果集中右表的部分将包含 NULL 值。
- 示例:使用左连接查询所有员工及其对应的部门(包括没有部门的员工):
SELECT employees.name, departments.name AS department_name
FROM employees
LEFT JOIN departments ON employees.department_id = departments.id;
- 结果:
name | department_name |
---|---|
Alice | HR |
Bob | Engineering |
Carol | NULL |
注意:Carol 出现在结果集中,但她的 department_name 是 NULL,因为她的 department_id 在 departments 表中没有对应的行。
3. 右连接(RIGHT JOIN 或 RIGHT OUTER JOIN)
- 定义:与左连接相反,返回右表中的所有行,以及左表中匹配的行。如果右表中的某行在左表中没有匹配的行,则结果集中左表的部分将包含 NULL 值。
- 示例:虽然右连接在 SQL 中不常用(因为可以通过交换表和连接类型来实现相同的结果),但以下是一个示例:
SELECT employees.name, departments.name AS department_name
FROM departments
RIGHT JOIN employees ON employees.department_id = departments.id;
- 结果 :与前面的左连接示例相同,但逻辑上是从 departments 表开始的。
注意:尽管右连接在某些数据库系统中存在,但许多开发人员和数据库管理员更倾向于使用左连接,因为它更符合从左到右的阅读习惯,并且可以通过简单地交换表和连接类型来实现相同的结果。