Der SQL INTERSECT Befehl zeigt, welche Zeilen sowohl in TabelleA als auch in TabelleB gleichermaßen existieren.
SELECT Spalte FROM TabelleA
INTERSECT
SELECT Spalte FROM TabelleB;
SQL INTERSECT dient zur Kombination zweier Abfragen, gibt aber nur die Zeilen aus der ersten Abfrage wieder, die mit einer Zeile der Abfrage übereinstimmen. Wenn eine Zeile in einer Abfrage vorhanden ist, aber in der anderen Fehlt, wird sie in den INTERSECT-Ergebnissen ausgelassen. Das bedeutet, dass INTERSECT nur gemeinsame Zeilen beider Abfragen wiedergibt.
SQL INTERSECT - Beispiel
Wir wollen in unserem Unternehmen überprüfen, welche Mitarbeiter bei uns auch Kunden sind, um ihnen nachträglich Mitarbeiterrabatt zu geben. Wir wollen also wissen, welche Namen sowohl in der Kunden- als auch Personaltabelle enthalten sind:
SELECT Vorname, Nachname FROM Kunden
INTERSECT
SELECT Vorname, Nachname FROM Personal;
Die erste Abfrage gibt die Namen aller Kunden aus. Die zweite Abfrage gibt die Namen der Angestellten an. Mit INTERSECT werden alle Vor- und Nachnamen zwischen beiden Tabellen abgeglichen. Diejenigen, die sowohl Kunden als auch Angestellte sind, werden ausgegeben.
INTERSECT in MySQL
MySQL unterstützt die INTERSECT Klausel nicht. Stattdessen kann die IN oder EXISTS Klausel genutzt werden, um dieselben Resultate zu erzielen:
SELECT TabelleA.Spalte
FROM TabelleA
WHERE TabelleA.Spalte IN (SELECT TabelleB.Spalte FROM TabelleB);
--oder:
SELECT TabelleA.SpalteA, TabelleA.SpalteB
FROM TabelleA
WHERE EXISTS (SELECT * FROM TabelleB
WHERE TabelleA.SpalteA = TabelleB.SpalteA
AND TabelleA.SpalteB = TabelleB.SpalteB);