集合演算子

適用対象:「はい」のチェック マーク Databricks SQL 「はい」のチェック マーク Databricks Runtime

2 つのサブクエリを 1 つに結合します。 Databricks SQL では、次の 3 種類のセット演算子がサポートされています。

  • EXCEPT
  • INTERSECT
  • UNION

構文

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

    SELECT に指定されている、任意の 2 つの subquery 句。 両方のサブクエリの列数は同じである必要があり、それぞれの列に対して最も一般的でない型を共有します。

  • UNION [ALL | DISTINCT]

    subquery1 plus the rows of subquery2` の結果を返します。

    ALL を指定した場合は、重複する行が保持されます。

    DISTINCT を指定した場合、結果には重複する行は含まれません。 既定のプランです。

  • INTERSECT [ALL | DISTINCT]

    両方のサブクエリに含まれる行のセットを返します。

    ALL が指定されている場合は、subquery1subquery に複数回出現する行が複数回返されます。

    DISTINCT を指定した場合、結果には重複する行は含まれません。 既定のプランです。

  • EXCEPT [ALL | DISTINCT ]

    subquery2 に含まれていない subquery1 の行を返します。

    ALL を指定した場合、subquery2 の各行は、subquery1 からの複数の一致から 1 つだけ削除します。

    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