In SQLite das INTERSECT
-Operator wird verwendet, um ein zusammengesetztes SELECT
zu erstellen -Anweisung, die den Schnittpunkt der Ergebnisse des linken und rechten SELECT
zurückgibt Aussagen. Mit anderen Worten, es kombiniert zwei Abfragen, gibt aber nur die Zeilen zurück, die in beiden Abfragen zurückgegeben werden.
Beispiel
Angenommen, wir haben die folgenden Tabellen:
SELECT * FROM Employees;
SELECT * FROM Customers;
Ergebnis:
EmployeeId EmployeeName ---------- ------------ 1 Bart 2 Jan 3 Ava 4 Rohit 5 Monish 6 Monish 7 Monish CustomerId CustomerName ---------- ------------ 1 Mia 2 Rohit 3 Peter 4 Ava 5 Monish 6 Monish
Wir können den INTERSECT
verwenden Betreiber, um Mitarbeiter zurückzugeben, die auch Kunden sind:
SELECT EmployeeName FROM Employees
INTERSECT
SELECT CustomerName FROM Customers;
Ergebnis:
EmployeeName ------------ Ava Monish Rohit
Wir erhalten also nur Werte, die in Employees
vorkommen Tabelle, die auch in Customers
erscheinen Tisch.
SQLite-Implementierung von INTERSECT
-Operator gibt nur eindeutige Zeilen zurück. Das obige Beispiel gibt also nur eine Zeile für Monish zurück, obwohl es mehrere Mitarbeiter und mehrere Kunden mit diesem Namen gibt.
Andere RDBMS erlauben es uns, Duplikate in das Ergebnis aufzunehmen, indem wir einen optionalen ALL
akzeptieren Stichwort mit ihrem INTERSECT
-Operator, aber SQLite nicht (zumindest nicht zum Zeitpunkt des Schreibens). Fühlen Sie sich frei, die SQLite-Dokumentation zu überprüfen, falls sich etwas ändert.
Eine alternative Abfrage
Es ist möglich, dasselbe Ergebnis ohne Verwendung von INTERSECT
zu erhalten Operator. Zum Beispiel könnten wir unser erstes Beispiel so umschreiben:
SELECT
DISTINCT EmployeeName
FROM Employees e
WHERE EXISTS (SELECT CustomerName FROM Customers c
WHERE e.EmployeeName = c.CustomerName);
Ergebnis:
EmployeeName ------------ Ava Rohit Monish