Inner join 和left join区别示例
时间: 2025-06-04 14:24:41 浏览: 23
### Inner Join 与 Left Join 的区别
在 SQL 中,`INNER JOIN` 和 `LEFT JOIN` 是两种常见的连接类型,用于将两个或多个表中的数据进行关联查询。两者的区别主要体现在返回结果的范围和数据完整性上。
#### 1. **INNER JOIN**
`INNER JOIN` 返回的是两个表中满足连接条件的记录集合[^2]。如果左表中的某一行在右表中没有匹配项,则该行不会出现在结果集中。
- **特点**:
- 只返回两个表中匹配的记录。
- 如果某一行在其中一个表中没有对应的匹配项,则该行会被忽略。
- **语法**:
```sql
SELECT columns
FROM table1
INNER JOIN table2
ON table1.column = table2.column;
```
- **示例**:
假设有两张表 `student` 和 `sclass`,分别表示学生信息和班级信息。使用 `INNER JOIN` 查询学生及其所属班级的信息。
```sql
SELECT s1.id, s1.uname, s1.age, s2.class_name
FROM student s1
INNER JOIN sclass s2
ON s1.id = s2.student_id;
```
如果某个学生没有对应的班级信息,则该学生的记录不会出现在结果集中[^2]。
#### 2. **LEFT JOIN**
`LEFT JOIN` 返回左表中的所有记录,即使右表中没有匹配的记录。对于右表中没有匹配项的左表记录,右表对应的部分会显示为 `NULL`[^5]。
- **特点**:
- 返回左表的所有记录。
- 如果左表中的某一行在右表中没有匹配项,则右表对应的部分会填充为 `NULL`。
- 结果集包含 `INNER JOIN` 的所有记录,以及左表中没有匹配项的记录。
- **语法**:
```sql
SELECT columns
FROM table1
LEFT JOIN table2
ON table1.column = table2.column;
```
- **示例**:
继续使用 `student` 和 `sclass` 表,使用 `LEFT JOIN` 查询学生及其所属班级的信息。
```sql
SELECT s1.id, s1.uname, s1.age, s2.class_name
FROM student s1
LEFT JOIN sclass s2
ON s1.id = s2.student_id;
```
如果某个学生没有对应的班级信息,则班级信息部分会显示为 `NULL`[^4]。
### 总结
- `INNER JOIN` 仅返回两个表中匹配的记录。
- `LEFT JOIN` 返回左表中的所有记录,即使右表中没有匹配项,右表对应的部分会显示为 `NULL`[^3]。
```sql
-- INNER JOIN 示例
SELECT a.id, a.name, b.class
FROM A a
INNER JOIN B b
ON a.id = b.id;
-- LEFT JOIN 示例
SELECT a.id, a.name, b.class
FROM A a
LEFT JOIN B b
ON a.id = b.id;
```
阅读全文
相关推荐




















