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