通过举例说明inner join on, left join on, right join on详细使用方法
时间: 2025-06-12 20:04:37 浏览: 5
### SQL JOIN 的详细使用方法及示例
以下是关于 `INNER JOIN`、`LEFT JOIN` 和 `RIGHT JOIN` 的详细介绍,包括它们的作用和具体用法。每种类型的 JOIN 都附带了一个具体的例子来帮助理解。
---
### 1. INNER JOIN
#### 功能描述
`INNER JOIN` 返回两个表中满足连接条件的所有匹配记录。如果某个表中的某条记录在另一个表中找不到对应的匹配项,则该记录不会被包含在结果集中[^3]。
#### 示例代码
假设有两张表:`employees` 和 `departments`,分别表示员工信息和部门信息。
```sql
-- employees 表结构
CREATE TABLE employees (
employee_id INT PRIMARY KEY,
name VARCHAR(50),
department_id INT
);
-- departments 表结构
CREATE TABLE departments (
department_id INT PRIMARY KEY,
department_name VARCHAR(50)
);
```
现在我们想获取所有有对应部门的员工姓名及其所属部门名称。
```sql
SELECT
e.name AS employee_name,
d.department_name
FROM
employees e
INNER JOIN
departments d
ON
e.department_id = d.department_id;
```
#### 结果解释
只有当 `employees` 表中的 `department_id` 能够与 `departments` 表中的 `department_id` 匹配时,才会返回相应的记录[^2]。
---
### 2. LEFT JOIN
#### 功能描述
`LEFT JOIN` 返回左表 (`table1`) 中的所有记录,即使右表 (`table2`) 中没有找到匹配的记录。对于右表中不存在匹配的情况,结果集中的相应字段会被填充为 NULL 值[^4]。
#### 示例代码
继续使用上面提到的 `employees` 和 `departments` 表。这次我们要查找所有员工的信息,无论他们是否有分配到部门。
```sql
SELECT
e.name AS employee_name,
d.department_name
FROM
employees e
LEFT JOIN
departments d
ON
e.department_id = d.department_id;
```
#### 结果解释
即使某些员工尚未分配到任何部门(即他们的 `department_id` 在 `departments` 表中无对应值),这些员工仍然会出现在结果集中,而其 `department_name` 字段则显示为 NULL[^4]。
---
### 3. RIGHT JOIN
#### 功能描述
`RIGHT JOIN` 是 `LEFT JOIN` 的镜像版本,它返回右表 (`table2`) 中的所有记录,即便左表 (`table1`) 中没有找到匹配的记录。同样地,对于左表中缺失匹配的情况,结果集中的相应字段也会被设为 NULL 值[^4]。
#### 示例代码
再次利用 `employees` 和 `departments` 表。这一次我们的目标是从 `departments` 表出发,查看哪些部门目前没有任何员工归属。
```sql
SELECT
e.name AS employee_name,
d.department_name
FROM
employees e
RIGHT JOIN
departments d
ON
e.department_id = d.department_id;
```
#### 结果解释
这里展示的是每一个部门的名字以及属于这个部门的第一个雇员名字;如果没有雇员归属于特定部门,则 `employee_name` 显示为 NULL[^4]。
---
### 总结对比
| **JOIN 类型** | **返回内容** |
|--------------------|---------------------------------------------------------------------------------------------------|
| `INNER JOIN` | 只返回两个表都有的匹配记录 |
| `LEFT JOIN` | 返回左表的所有记录,右表不匹配的部分填入 NULL |
| `RIGHT JOIN` | 返回右表的所有记录,左表不匹配的部分填入 NULL |
---
###
阅读全文
相关推荐
















