推荐答案
在 Presto 中,UNION 运算符用于合并两个或多个 SELECT 语句的结果集。UNION 会去除重复的行,而 UNION ALL 则会保留所有行,包括重复的行。
基本语法
SELECT column1, column2, ... FROM table1 UNION SELECT column1, column2, ... FROM table2;
示例
假设有两个表 employees 和 contractors,它们都有 name 和 salary 列。我们可以使用 UNION 来合并这两个表中的数据:
SELECT name, salary FROM employees UNION SELECT name, salary FROM contractors;
使用 UNION ALL
如果你希望保留重复的行,可以使用 UNION ALL:
SELECT name, salary FROM employees UNION ALL SELECT name, salary FROM contractors;
本题详细解读
UNION 与 UNION ALL 的区别
UNION: 合并两个查询的结果集,并去除重复的行。这意味着如果两个查询返回的结果中有相同的行,UNION只会保留其中的一行。UNION ALL: 合并两个查询的结果集,但不会去除重复的行。这意味着如果两个查询返回的结果中有相同的行,UNION ALL会保留所有相同的行。
注意事项
- 列数和数据类型必须匹配: 使用
UNION或UNION ALL时,两个SELECT语句的列数必须相同,并且对应列的数据类型必须兼容。 - 性能考虑:
UNION由于需要去重,通常比UNION ALL更消耗资源。如果你确定结果集中不会有重复行,或者你希望保留重复行,使用UNION ALL会更高效。
示例解析
假设 employees 表中有以下数据:
| name | salary |
|---|---|
| Alice | 50000 |
| Bob | 60000 |
contractors 表中有以下数据:
| name | salary |
|---|---|
| Alice | 50000 |
| Charlie | 70000 |
使用 UNION 的结果将是:
| name | salary |
|---|---|
| Alice | 50000 |
| Bob | 60000 |
| Charlie | 70000 |
使用 UNION ALL 的结果将是:
| name | salary |
|---|---|
| Alice | 50000 |
| Bob | 60000 |
| Alice | 50000 |
| Charlie | 70000 |
在这个例子中,UNION 去除了重复的 Alice 行,而 UNION ALL 保留了所有行。