Mengenoperatoren
Gilt für: Databricks SQL 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 insubquery1
und insubquery
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 insubquery2
befinden.Bei Angabe von
ALL
entfernt jede Zeile insubquery2
genau eine von möglicherweise mehreren Übereinstimmungen aussubquery1
.Bei Angabe von
DISTINCT
werden doppelte Zeilen aussubquery1
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ürEXCEPT
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