Set 運算子

適用于:核取標示為是 Databricks SQL 檢查標示為是 Databricks Runtime

將兩個子查詢合併成單一查詢。 Databricks SQL 支援三種類型的集合運算子:

  • EXCEPT
  • INTERSECT
  • UNION

語法

subquery1 { { UNION [ ALL | DISTINCT ] |
              INTERSECT [ ALL | DISTINCT ] |
              EXCEPT [ ALL | DISTINCT ] } subquery2 } [...] }
  • subquery1subquery2

    SELECT中指定的任何兩 subquery 個子句。 這兩個子查詢必須具有相同數目的資料行,並為每個個別資料行共用最不通用的類型。

  • UNION [ALL |DISTINCT]

    傳回 subquery2' 的結果 subquery1 plus the rows of

    如果 ALL 指定重複的資料列會保留。

    如果 DISTINCT 已指定 ,則結果不包含任何重複的資料列。 這是預設值。

  • INTERSECT [ALL |DISTINCT]

    傳回這兩個子查詢中的資料列集。

    如果 ALL 指定了 在 中 subquery1 出現多次的資料列,則會 subquery 傳回多次。

    如果 DISTINCT 已指定 ,則結果不包含重複的資料列。 這是預設值。

  • 除了 [ALL |DISTINCT ]

    傳回不在 中的資料 subquery2subquery1

    如果 ALL 已指定,中的每個 subquery2 資料列都會從 subquery1 移除其中一個可能有多個相符專案。

    如果 DISTINCT 已指定,則會在套用作業之前從 subquery1 中移除重複的資料列,因此會移除所有相符專案,而且結果不會有重複的資料列 (相符或不相符的) 。 這是預設值。

    您可以將 指定 MINUS 為 的 EXCEPT 語法替代方案。

當鏈結集作業 INTERSECT 的優先順序高於 UNIONEXCEPT 時。

每個結果資料行的類型都是 和 subquery2subquery1 個別資料行的最小通用類型。

例子

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