📜  SQL中JOIN和UNION的区别(1)

📅  最后修改于: 2023-12-03 15:20:19.206000             🧑  作者: Mango

SQL中JOIN和UNION的区别

在SQL中,JOIN和UNION是两种常用的操作,但它们的作用和用法却有所不同。下面将对JOIN和UNION进行详细介绍和比较。

JOIN操作

JOIN操作用于将两个或多个表中的数据进行合并,生成新的数据集合。JOIN操作可以分为以下几种类型:

  • INNER JOIN:返回两个表中满足JOIN条件的所有记录。
  • LEFT JOIN(或LEFT OUTER JOIN):返回左表中所有记录,以及右表中满足JOIN条件的记录。
  • RIGHT JOIN(或RIGHT OUTER JOIN):返回右表中所有记录,以及左表中满足JOIN条件的记录。
  • FULL JOIN(或FULL OUTER JOIN):返回左表和右表中所有记录,不管是否满足JOIN条件。

例如,假设有两个表students和scores,表结构如下:

students表:
+----+-------+------+
| id | name  | age  |
+----+-------+------+
| 1  | Alice | 18   |
| 2  | Bob   | 19   |
| 3  | Charlie | 20 |
+----+-------+------+

scores表:
+--------+--------+-------+
| stu_id | course | score |
+--------+--------+-------+
| 1      | math   | 80    |
| 1      | english| 90    |
| 2      | math   | 70    |
| 2      | english| 85    |
| 3      | math   | 65    |
| 3      | english| 75    |
+--------+--------+-------+

使用INNER JOIN操作,可以将这两个表中的数据进行合并,例如:

SELECT * FROM students INNER JOIN scores ON students.id = scores.stu_id;

结果如下:

+----+-------+------+--------+--------+-------+
| id | name  | age  | stu_id | course | score |
+----+-------+------+--------+--------+-------+
| 1  | Alice | 18   | 1      | math   | 80    |
| 1  | Alice | 18   | 1      | english| 90    |
| 2  | Bob   | 19   | 2      | math   | 70    |
| 2  | Bob   | 19   | 2      | english| 85    |
| 3  | Charlie | 20 | 3      | math   | 65    |
| 3  | Charlie | 20 | 3      | english| 75    |
+----+-------+------+--------+--------+-------+
UNION操作

UNION操作用于将两个或多个SELECT语句的结果集合并成一个结果集。要求每个SELECT语句中的列数和列类型必须一致。UNION操作将对结果集进行去重操作,如果需要保留重复行,可以使用UNION ALL操作。例如:

SELECT name, age FROM students WHERE age < 20
UNION
SELECT name, age FROM students WHERE name LIKE 'C%'

该语句将返回年龄小于20岁的学生和姓名以'C'开头的学生。

JOIN和UNION的区别
  • JOIN用于合并两个或多个表的记录,UNION用于合并两个或多个SELECT语句的结果集。
  • JOIN合并的结果是表格,列数和列类型取决于JOIN操作的类型和参与合并的表格。UNION合并的结果是一个行集,列数和列类型必须一致。
  • UNION会对结果进行去重,而JOIN不会。
  • JOIN操作可以根据JOIN条件对记录进行筛选,而UNION操作不支持对结果进行筛选。如果需要筛选结果,需要使用子查询或视图。

参考资料: