I SQLite, INTERSECT
operatorn används för att skapa en sammansatt SELECT
sats som returnerar skärningspunkten mellan resultaten av vänster och höger SELECT
uttalanden. Med andra ord, den kombinerar två frågor, men returnerar bara de rader som returneras i båda frågorna.
Exempel
Anta att vi har följande tabeller:
SELECT * FROM Employees;
SELECT * FROM Customers;
Resultat:
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
Vi kan använda INTERSECT
operatör att returnera anställda som också är kunder:
SELECT EmployeeName FROM Employees
INTERSECT
SELECT CustomerName FROM Customers;
Resultat:
EmployeeName ------------ Ava Monish Rohit
Så vi får bara värden som visas i Employees
tabell som också visas i Customers
tabell.
SQLites implementering av INTERSECT
operatören returnerar endast distinkta rader. Så exemplet ovan returnerar bara en rad för Monish, även om det finns flera anställda och flera kunder med det namnet.
Andra RDBMS tillåter oss att inkludera dubbletter i resultatet genom att acceptera en valfri ALL
nyckelord med deras INTERSECT
operatör, men det gör inte SQLite (åtminstone inte i skrivande stund). Kolla gärna SQLites dokumentation om något ändras.
En alternativ fråga
Det är möjligt att få samma resultat utan att använda INTERSECT
operatör. Till exempel skulle vi kunna skriva om vårt första exempel till detta:
SELECT
DISTINCT EmployeeName
FROM Employees e
WHERE EXISTS (SELECT CustomerName FROM Customers c
WHERE e.EmployeeName = c.CustomerName);
Resultat:
EmployeeName ------------ Ava Rohit Monish