推荐答案
在 Impala 中,UNION
运算符用于将两个或多个 SELECT
语句的结果集合并为一个结果集。UNION
会默认去除重复的行,而 UNION ALL
则会保留所有行,包括重复的行。
语法
SELECT column1, column2, ... FROM table1 UNION [ALL] SELECT column1, column2, ... FROM table2;
示例
假设有两个表 employees
和 contractors
,它们都有 name
和 salary
列。我们可以使用 UNION
来合并这两个表的结果:
SELECT name, salary FROM employees UNION SELECT name, salary FROM contractors;
如果希望保留重复的行,可以使用 UNION ALL
:
SELECT name, salary FROM employees UNION ALL SELECT name, salary FROM contractors;
本题详细解读
UNION
与 UNION ALL
的区别
UNION
:合并两个或多个SELECT
语句的结果集,并去除重复的行。UNION ALL
:合并两个或多个SELECT
语句的结果集,但保留所有行,包括重复的行。
使用场景
UNION
:适用于需要合并结果集并去除重复数据的场景。UNION ALL
:适用于需要合并结果集且不需要去除重复数据的场景,通常性能更好,因为它不需要进行去重操作。
注意事项
- 列数和数据类型:所有
SELECT
语句中的列数和数据类型必须一致。 - 性能:
UNION
由于需要去重,通常比UNION ALL
更消耗资源。 - 排序:如果需要排序,可以在最后一个
SELECT
语句后添加ORDER BY
子句。
示例解析
在示例中,employees
和 contractors
表都有 name
和 salary
列。使用 UNION
可以将这两个表的结果集合并,并去除重复的行。如果使用 UNION ALL
,则会保留所有行,包括重复的行。
性能优化
- 如果不需要去重,尽量使用
UNION ALL
,因为它比UNION
更快。 - 在合并大量数据时,考虑使用分区表或索引来优化查询性能。