集合运算符

适用于:勾选“是” 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,则将多次返回 subquery1subquery 中多次出现的行。

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

  • EXCEPT [ALL | DISTINCT ]

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

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

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

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

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

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

如果结果列是 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