适用于:
Databricks SQL
Databricks Runtime
将前面的 subquery1 和 subquery2 合并为一个。 Azure Databricks 支持三种类型的集运算符:
EXCEPTINTERSECTUNION
语法
{ UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ] subquery2 } [...]
-
在 SELECT (subselect) 中指定的任意两个
subquery子句。 这两个子查询必须具有相同的列数,并共享每个相应列的最少见类型。 UNION [ALL | DISTINCT]
返回
subquery1的结果加上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 中各自列的最少见类型。
如果结果列是一个 STRING,其排序规则是通过将排序规则优先级规则应用于子查询中的列来派生的。
示例
-- 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