概述

Presto 支持UNIONINTERSECTEXCEPT 3 种集合运算。这些子句用来将多个查询语句的结果合并成一个总的结果集。使用方法如下所示:

query UNION [ALL | DISTINCT] query
query INTERSECT [DISTINCT] query
query EXCEPT [DISTINCT] query

参数ALLDISTINCT来控制最终哪些行会出现在结果集中,默认设为DISTINCT

  • ALL, 有可能返回重复的行;
  • DISTINCT,对结果集进行去重。

INTERSECTEXCEPT不支持ALL选项。

上述3个集合运算可以组合使用,运算从左到右进行,INTERSECT的优先级最高,因此,组合运算A UNION B INTERSECT C EXCEPT D实际的顺序是A UNION (B INTERSECT C) EXCEPT D.

UNION

UNION对两个查询的结果集做并集运算,通过ALLDISTINCT来控制是否剔除重复项。

示例 1:

SELECT 13
UNION
SELECT 42;

 _col0
-------
    13
    42
(2 rows)

示例 2:

SELECT 13
UNION
SELECT * FROM (VALUES 42, 13);

 _col0
-------
    13
    42
(2 rows)

示例 3:

SELECT 13
UNION ALL
SELECT * FROM (VALUES 42, 13);

 _col0
-------
    13
    42
    13
(3 rows)

INTERSECT

INTERSECT对两个查询的结果集做交集运算。

示例:

SELECT * FROM (VALUES 13, 42)
INTERSECT
SELECT 13;

 _col0
-------
   13
(1 rows)

EXCEPT

EXCEPT求两个查询结果集的补集。

SELECT * FROM (VALUES 13, 42)
EXCEPT
SELECT 13;

 _col0
-------
   42
(1 rows)