推荐答案
在 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
保留了所有行。