mysql 的内连接和外连接的区别是什么,不能能具体举例说下
在 MySQL 中,内连接(INNER JOIN)和外连接(包括 LEFT JOIN、RIGHT JOIN 和 FULL JOIN)是 SQL 查询中用于结合两个或多个表的数据的方式。它们的主要区别在于如何处理在连接条件中不满足匹配的行。
内连接(INNER JOIN)
内连接返回两个表中满足连接条件的行。如果一行在任何一个表中没有匹配的行,那么该行就不会出现在结果集中。
例子:
假设我们有两个表:employees 和 departments。
employees 表:
plaintext
employee_id | employee_name | department_id |
---|---|---|
1 | Alice | 10 |
2 | Bob | 20 |
3 | Charlie | 10 |
departments` 表: |
plaintext
department_id | department_name |
---|---|
10 | HR |
20 | Engineering |
30 | Marketing |
如果我们想要查询每个员工和他们所在的部门,可以使用内连接: |
sql
SELECT employees.employee_name, departments.department_name
FROM employees
INNER JOIN departments ON employees.department_id = departments.department_id;
结果:
plaintext
employee_name | department_name |
---|---|
Alice | HR |
Bob | Engineering |
Charlie | HR |
注意,Marketing 部门没有员工,因此它不会出现在结果集中。 |
外连接
外连接会返回满足连接条件的行,以及在一个表中有而在另一个表中没有匹配的行。MySQL 支持 LEFT JOIN(左外连接)、RIGHT JOIN(右外连接)和 FULL JOIN(全外连接)。
LEFT JOIN(左外连接):返回左表中的所有行,以及右表中匹配的行。如果右表中没有匹配的行,则结果集中右表的部分会显示为 NULL。
RIGHT JOIN(右外连接):与 LEFT JOIN 相反,返回右表中的所有行,以及左表中匹配的行。如果左表中没有匹配的行,则结果集中左表的部分会显示为 NULL。
FULL JOIN(全外连接):返回当左表或右表中有匹配的行时的行。如果左表或右表中没有匹配的行,则结果集中没有匹配的部分会显示为 NULL。
LEFT JOIN 例子:
sql
SELECT employees.employee_name, departments.department_name
FROM employees
LEFT JOIN departments ON employees.department_id = departments.department_id;
结果:
plaintext
employee_name | department_name |
---|---|
Alice | HR |
Bob | Engineering |
Charlie | HR |
NULL | Marketing |
在这个例子中,Marketing 部门没有员工,但仍然出现在结果集中,因为 LEFT JOIN 会返回左表(employees)中的所有行。 |
RIGHT JOIN 和 FULL JOIN 的例子可以类似地构建,只是结果集会根据连接的表和连接条件的不同而有所变化。