SQLite
 sql >> Datenbank >  >> RDS >> SQLite

SQLite-INTERSECT-Operator

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