Freigeben über


Mengenoperatoren

Gilt für: durch Häkchen mit „Ja“ markiert Databricks SQL durch Häkchen mit „Ja“ markiert Databricks Runtime

Erstellt aus zwei einzelnen Unterabfragen eine kombinierte Unterabfrage. Databricks SQL unterstützt drei Typen von Mengenoperatoren:

  • EXCEPT
  • INTERSECT
  • UNION

Syntax

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

    Zwei beliebige subquery-Klauseln, wie in SELECT angegeben. Beide Unterabfragen müssen die gleiche Anzahl von Spalten und für jede Spalte einen kleinsten gemeinsamen Typ aufweisen.

  • UNION [ALL | DISTINCT]

    Gibt das Ergebnis von subquery1 plus the rows of unterquery2' zurück.

    Bei Angabe von ALL werden doppelte Zeilen beibehalten.

    Bei Angabe von DISTINCT enthält das Ergebnis keine doppelten Zeilen. Dies ist die Standardoption.

  • INTERSECT [ALL | DISTINCT]

    Gibt den Satz der Zeilen zurück, die sich in beiden Unterabfragen befinden.

    Bei Angabe von ALL wird eine Zeile, die mehrmals in subquery1 und in subquery enthalten wird, mehrmals zurückgegeben.

    Bei Angabe von DISTINCT enthält das Ergebnis keine doppelten Zeilen. Dies ist die Standardoption.

  • EXCEPT [ALL | DISTINCT ]

    Gibt die Zeilen in subquery1 zurück, die sich nicht in subquery2 befinden.

    Bei Angabe von ALL entfernt jede Zeile in subquery2 genau eine von möglicherweise mehreren Übereinstimmungen aus subquery1.

    Bei Angabe von DISTINCT werden doppelte Zeilen aus subquery1 entfernt, bevor der Vorgang durchgeführt wird. Daher werden alle Übereinstimmungen entfernt, und das Ergebnis enthält keine doppelten Zeilen (übereinstimmende oder nicht übereinstimmende Zeilen). Dies ist die Standardoption.

    Sie können MINUS als Syntaxalternative für EXCEPT angeben.

Beim Verketten von Mengenoperationen hat INTERSECT Vorrang vor UNION und EXCEPT.

Der Typ jeder Ergebnisspalte ist der kleinste gemeinsame Typ der entsprechenden Spalten in subquery1 und subquery2.

Beispiele

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