共用方式為


Set 運算子

適用於:核取記號為「是」Databricks SQL 核取記號為「是」Databricks Runtime

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

  • EXCEPT
  • INTERSECT
  • UNION

語法

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

    SELECT中指定的兩個 subquery 子句中的任何一個。 這兩個子查詢必須具有相同數目的 columns,並且為每個相應的 column共用最小共同類型。

  • UNION [ALL |DISTINCT]

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

    如果 ALL 指定重複的數據列會保留。

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

  • INTERSECT [ALL |DISTINCT]

    傳回這兩個子查詢中的數據列 set。

    如果 ALL 指定了在 和 subquery1subquery 出現多次的數據列,則會傳回多次。

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

  • 除了 [ALL |DISTINCT ]

    傳回不在 中的數據subquery1subquery2

    如果指定了 ALLsubquery2 中的每個數據行都會 remove 來自 subquery1的可能多個匹配項目中的一個。

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

    您可以指定 MINUS 為的語法替代專案 EXCEPT

當連續執行 set 操作時,INTERSECT 的優先順序高於 UNIONEXCEPT

每個結果 column 的類型都是 subquery1subquery2中個別 columns 最不常見的類型。

如果結果 column 是 STRING,其排序是透過將 的排序優先順序規則應用到子查詢中的 columns 而得。

範例

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