适用于:
Databricks SQL
Databricks Runtime
将两个子查询合并为一个。 Databricks SQL 支持 3 种集运算符:
EXCEPTINTERSECTUNION
语法
subquery1 { { UNION [ ALL | DISTINCT ] |
INTERSECT [ ALL | DISTINCT ] |
EXCEPT [ ALL | DISTINCT ] } subquery2 } [...] }
subquery1、subquery2
任意两个
subquery子句,如 SELECT 中所述。 这两个子查询必须具有相同的列数,并共享每个相应列的最少见类型。UNION [ALL | DISTINCT]
返回
subquery1 plus the rows ofsubquery2` 的结果。如果指定了
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