集合运算符
适用于: Databricks SQL Databricks Runtime
将两个子查询合并为一个。 Databricks SQL 支持 3 种集运算符:
EXCEPT
INTERSECT
UNION
语法
subquery1 { { UNION [ ALL | DISTINCT ] |
INTERSECT [ ALL | DISTINCT ] |
EXCEPT [ ALL | DISTINCT ] } subquery2 } [...] }
subquery1、subquery2
任意两个
subquery
子句,如 SELECT 中所述。 这两个子查询必须具有相同的列数,并共享每个相应列的最少见类型。UNION [ALL | DISTINCT]
返回
subquery1 plus the rows of
subquery2` 的结果。如果指定了
ALL
,则保留重复行。如果指定了
DISTINCT
,则结果不包含任何重复行。 这是默认值。INTERSECT [ALL | DISTINCT]
返回两个子查询中共有的行集。
如果指定了
ALL
,则将多次返回subquery1
和subquery
中多次出现的行。如果指定了
DISTINCT
,则结果不包含重复行。 这是默认值。EXCEPT [ALL | DISTINCT ]
返回出现在
subquery1
中但不在subquery2
中的行。如果指定了
ALL
,则subquery2
中的每一行都将删除subquery1
中可能的多个匹配项中的一个。如果指定了
DISTINCT
,则在应用操作之前删除subquery1
中重复的行,确保删除所有匹配项并且结果将没有重复的行(匹配或不匹配)。 这是默认值。可指定
MINUS
作为EXCEPT
的替代语法。
链接集操作时,INTERSECT
的优先级高于 UNION
和 EXCEPT
。
每个结果列的类型是 subquery1
和 subquery2
中各自列的最少见类型。
示例
-- Use number1 and number2 tables to demonstrate set operators in this page.
> CREATE TEMPORARY VIEW number1(c) AS VALUES (3), (1), (2), (2), (3), (4);
> CREATE TEMPORARY VIEW number2(c) AS VALUES (5), (1), (1), (2);
> SELECT c FROM number1 EXCEPT SELECT c FROM number2;
3
4
> SELECT c FROM number1 MINUS SELECT c FROM number2;
3
4
> SELECT c FROM number1 EXCEPT ALL (SELECT c FROM number2);
3
3
4
> SELECT c FROM number1 MINUS ALL (SELECT c FROM number2);
3
3
4
> (SELECT c FROM number1) INTERSECT (SELECT c FROM number2);
1
2
> (SELECT c FROM number1) INTERSECT DISTINCT (SELECT c FROM number2);
1
2
> (SELECT c FROM number1) INTERSECT ALL (SELECT c FROM number2);
1
2
2
> (SELECT c FROM number1) UNION (SELECT c FROM number2);
1
3
5
4
2
> (SELECT c FROM number1) UNION DISTINCT (SELECT c FROM number2);
1
3
5
4
2
> SELECT c FROM number1 UNION ALL (SELECT c FROM number2);
3
1
2
2
3
4
5
1
1
2