集合运算符

适用于:check marked yes Databricks SQL check marked yes 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,则将多次返回 subquery1subquery 中多次出现的行。

    如果指定了 DISTINCT,则结果不包含重复行。 这是默认值。

  • EXCEPT [ALL | DISTINCT ]

    返回出现在 subquery1 中但不在 subquery2 中的行。

    如果指定了 ALL,则 subquery2 中的每一行都将删除 subquery1 中可能的多个匹配项中的一个。

    如果指定了 DISTINCT,则在应用操作之前删除 subquery1 中重复的行,确保删除所有匹配项并且结果将没有重复的行(匹配或不匹配)。 这是默认值。

    可指定 MINUS 作为 EXCEPT 的替代语法。

链接集操作时,INTERSECT 的优先级高于 UNIONEXCEPT

每个结果列的类型是 subquery1subquery2 中各自列的最少见类型。

示例

-- 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