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