SQLite
 sql >> Database >  >> RDS >> SQLite

Operatore INTERSECT SQLite

In SQLite, il INTERSECT viene utilizzato per creare un composto SELECT istruzione che restituisce l'intersezione dei risultati di SELECT sinistra e destra dichiarazioni. In altre parole, combina due query, ma restituisce solo le righe restituite in entrambe le query.

Esempio

Supponiamo di avere le seguenti tabelle:

SELECT * FROM Employees;
SELECT * FROM Customers;

Risultato:

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      

Possiamo usare il INTERSECT operatore per restituire i dipendenti che sono anche clienti:

SELECT EmployeeName FROM Employees
INTERSECT
SELECT CustomerName FROM Customers;

Risultato:

EmployeeName
------------
Ava         
Monish      
Rohit       

Quindi otteniamo solo i valori che appaiono in Employees tabella che compare anche in Customers tavolo.

L'implementazione di SQLite di INTERSECT l'operatore restituisce solo righe distinte. Quindi l'esempio sopra restituisce solo una riga per Monish, anche se ci sono più dipendenti e più clienti con quel nome.

Altri RDBMS ci consentono di includere duplicati nel risultato accettando un ALL opzionale parola chiave con il loro INTERSECT operatore, ma SQLite no (almeno, non al momento della scrittura). Sentiti libero di controllare la documentazione di SQLite nel caso qualcosa cambi.

Una query alternativa

È possibile ottenere lo stesso risultato senza utilizzare il INTERSECT operatore. Ad esempio, potremmo riscrivere il nostro primo esempio in questo:

SELECT 
    DISTINCT EmployeeName
FROM Employees e
WHERE EXISTS (SELECT CustomerName FROM Customers c
WHERE e.EmployeeName = c.CustomerName);

Risultato:

EmployeeName
------------
Ava         
Rohit       
Monish