在 SQL 中,`UNION` 运算符用于选择两个或多个表中的字段。
-- select the union of name columns from two tables Teachers and Students
SELECT name
FROM Teachers
UNION
SELECT name
FROM Students;
在这里,SQL 命令选择两个不同表:Teachers 和 Students 中 name 列的并集。
SQL Union 语法
SELECT column1, column2, ...
FROM table1
UNION
SELECT column1, column2, ...
FROM table2;
这里,
- column1,column2, ... 是并集所需的列名
- table1 和 table2 是要从中获取列的表的名称
- `UNION` 合并表中的列
注意:如果从表中选择的列包含相同的数据,则这些列在结果集中只包含一次。
示例:SQL UNION
-- select the union of age columns from two tables Teachers and Students
SELECT age
FROM Teachers
UNION
SELECT age
FROM Students;
在这里,SQL 命令返回 Teachers 和 Students 表中的 age 列,忽略重复字段。

要在 SQL 中使用 `UNION`,我们必须始终记住:
- 所有表中的列数必须相同。例如,`Teachers` 和 `Students` 表都有三列。
- 列的数据类型必须相同。例如,`Teachers` 和 `Students` 表中的 `age` 列都是整数类型。
- 每张表中的列顺序必须相同。例如,`Teachers` 和 `Students` 表中的列顺序都是 **id-name-age**。
注意:我们的在线编译器基于 SQLite,它在执行 `UNION` 操作时会将其中一列的值转换为与另一列的数据类型匹配。
示例:带 WHERE 子句的 SQL UNION
-- select the union of age columns from both Teachers and Students tables where age >= 20
SELECT age, name FROM Teachers
WHERE age >= 20
UNION
SELECT age, name FROM Students
WHERE age >= 20;
在这里,SQL 命令从两个表中选择 age 列(仅唯一值),其中 age 大于或等于 **20**。
SQL UNION ALL 运算符
`UNION ALL` 运算符选择两个或多个表中的字段,与 `UNION` 类似。然而,与 `UNION` 不同,`UNION ALL` 不会忽略重复字段。
让我们再次尝试使用 `UNION ALL` 而不是 `UNION` 的前一个 SQL 命令。
-- select the union of age from Teachers and Students tables
SELECT age
FROM Teachers
UNION ALL
SELECT age
FROM Students;
在这里,SQL 命令选择两个表中的字段,包括重复字段。

示例:带 WHERE 子句的 SQL UNION ALL
-- select the union of age columns from both Teachers and Students tables where age >= 20
SELECT age, name FROM Teachers
WHERE age >= 20
UNION ALL
SELECT age, name FROM Students
WHERE age >= 20;
在这里,SQL 命令从两个表中选择 age 列(包括重复值),其中 age 大于或等于 **20**。
更多关于 SQL UNION
SQL UNION | SQL UNION ALL |
---|---|
它只返回来自两个查询结果集的唯一值。 | 它返回来自两个查询结果集的重复值。 |
与 `UNION ALL` 运算符相比速度较慢。 | 执行速度更快,因为无需过滤结果集以删除重复值。 |
SQL JOIN | SQL UNION |
---|---|
它用于将来自不同表的数据合并到新列中。 |
它用于将来自不同查询结果的数据合并到新行中。 |
它使用两个表中的公共列来获取数据。 | 它从两个表中选择数据并将它们组合在输出中。 |
表中可以存在任意数量的列。 | 两个表中的列数必须相同。 |
列的数据类型可以不同。 | 列的数据类型应理想地相同(除了一些数据库,如 SQLite) |
要了解更多信息,请访问 SQL JOIN。
另请阅读