通过


集合运算符

适用于:勾选“是” Databricks SQL 勾选“是” Databricks Runtime

将前面的 subquery1subquery2 合并为一个。 Azure Databricks支持三种类型的集运算符:

  • EXCEPT
  • INTERSECT
  • UNION

语法

{ UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ] subquery2 } [...]
  • 子查询 2

    subquery 中指定的任意两个 SELECT 子句。 这两个子查询必须具有相同的列数,并共享每个相应列的最少见类型。 如果列数不同,Azure Databricks将引发 NUM_COLUMNS_MISMATCH。 如果相应的列具有不兼容的类型,Azure Databricks将引发 INCOMPATIBLE_COLUMN_TYPE

  • UNION [ALL |DISTINCT]

    返回 subquery1 的结果加上 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

-- Different number of columns.
> SELECT c FROM number1 UNION SELECT c, c FROM number2;
  Error: NUM_COLUMNS_MISMATCH