Ausführen von Semi-Join-Vorgängen mit EXCEPT und INTERSECT
Die Operatoren EXCEPT und INTERSECT ermöglichen es Ihnen, die Ergebnisse zwei oder mehr SELECT-Anweisungen miteinander zu vergleichen und unterschiedliche Werte zurückgeben zu lassen. Der EXCEPT-Operator gibt sämtliche unterschiedlichen Werte der Abfrage links vom EXCEPT-Operator zurück, die nicht von der Abfrage rechts zurückgegeben werden. INTERSECT gibt sämtliche unterschiedlichen Werte zurück, die von der Abfrage links und rechts vom INTERSECT-Operator zurückgegeben werden. Die mithilfe von EXCEPT oder INTERSECT verglichenen Resultsets müssen alle dieselbe Struktur aufweisen. Sie müssen über dieselbe Anzahl an Spalten verfügen, und die einander entsprechenden Resultsetspalten müssen kompatible Datentypen aufweisen. Weitere Informationen finden Sie unter EXCEPT und INTERSECT (Transact-SQL).
Betrachten Sie die Tabellen TableA, TableB und TableC mit folgenden Daten in ihrer jeweiligen int-Spalte col1.
TableA (col1 int) | TableB (col1 int) | TableC (col1 int) |
---|---|---|
NULL |
NULL |
2 |
NULL |
1 |
2 |
NULL |
3 |
2 |
1 |
4 |
4 |
2 |
4 |
4 |
2 |
||
2 |
||
3 |
||
4 |
||
4 |
mithilfe von EXCEPT gibt folgende Abfrage sämtliche unterschiedlichen Werte der Abfrage links vom EXCEPT-Operand, die in der rechten Abfrage nicht gefunden wurden.
SELECT * FROM TableA EXCEPT SELECT * FROM TableB
Im Folgenden werden die Ergebnisse aufgeführt:
Col1
-----------
2
(1 row(s) affected)
mithilfe von INTERSECT gibt diese Abfrage sämtliche unterschiedlichen Werte zurück, die von der Abfrage links und rechts vom INTERSECT-Operator zurückgegeben werden.
SELECT * FROM TableA INTERSECT SELECT * FROM TableB
Im Folgenden werden die Ergebnisse aufgeführt:
Col1
-----------
NULL
1
3
4
(4 row(s) affected)
Der INTERSECT-Operator hat gegenüber EXCEPT Vorrang. In folgender Abfrage werden beispielsweise beide Operatoren verwendet:
SELECT * FROM TableA EXCEPT SELECT * FROM TableB INTERSECT SELECT * FROM TableC
Im Folgenden werden die Ergebnisse aufgeführt:
Col1
-----------
NULL
1
2
3
(4 row(s) affected)
Siehe auch
Konzepte
Verwenden von UNION, EXCEPT und INTERSECT mit anderen Transact-SQL-Anweisungen