inner join、left join、right join 以及 union all 之间的区别
时间: 2025-02-04 10:07:04 浏览: 33
### 不同SQL连接类型的区别
#### INNER JOIN
INNER JOIN 返回两个表中满足连接条件的记录。这意味着只有当左表和右表都存在匹配项时,才会返回结果。
```sql
SELECT s.id, s.name, c.id, c.name
FROM student s
INNER JOIN classes c ON s.cid = c.id;
```
此查询仅会显示那些既有学生又有班级的数据[^1]。
#### LEFT JOIN (LEFT OUTER JOIN)
LEFT JOIN 会返回左表中的所有记录以及右表中符合条件的记录;如果右表中不存在匹配,则结果集中来自右表的字段将包含NULL值。
```sql
SELECT s.id, s.name, c.id, c.name
FROM student s
LEFT JOIN classes c ON s.cid = c.id;
```
这段代码即使某些学生未分配到任何班级也会列出这些学生的信息,并且对于没有对应学生的班级名称将会是 NULL 值[^3]。
#### RIGHT JOIN (RIGHT OUTER JOIN)
RIGHT JOIN 是 LEFT JOIN 的镜像操作,它返回的是右表里的全部数据加上左边表格里相配对的数据;如果没有找到对应的左侧条目,则左侧部分为空(NULL)。
```sql
SELECT s.id, s.name, c.id, c.name
FROM student s
RIGHT JOIN classes c ON s.cid = c.id;
```
这里展示所有的班级信息,即便有些班上没有任何注册的学生也一样会被列出[^2]。
#### UNION ALL
UNION ALL 并不是一种JOIN而是用于组合多个 SELECT 查询的结果集。这可以用来创建一个新的临时表,该表由参与联合的所有原始表组成。需要注意的是,`UNION ALL`不会去除重复行,而只是简单地把所有选定的行堆叠在一起形成新的集合。
```sql
SELECT id, name FROM students
UNION ALL
SELECT id, name FROM teachers;
```
上述语句将 `students` 表与 `teachers` 表的内容合并成一个更大的列表,其中可能含有重复的名字或ID[^4]。
阅读全文
相关推荐



















