I SQLite er INTERSECT operator bruges til at oprette en sammensat SELECT sætning, der returnerer skæringspunktet mellem resultaterne af venstre og højre SELECT udsagn. Med andre ord kombinerer den to forespørgsler, men returnerer kun de rækker, der returneres i begge forespørgsler.
Eksempel
Antag, at vi har følgende 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 bruge INTERSECT operatør til at returnere medarbejdere, der også er kunder:
SELECT EmployeeName FROM Employees
INTERSECT
SELECT CustomerName FROM Customers; Resultat:
EmployeeName ------------ Ava Monish Rohit
Så vi får kun værdier, der vises i Employees tabel, der også vises i Customers bord.
SQLites implementering af INTERSECT operatør returnerer kun distinkte rækker. Så ovenstående eksempel returnerer kun én række for Monish, selvom der er flere ansatte og flere kunder med det navn.
Andre RDBMS'er giver os mulighed for at inkludere dubletter i resultatet ved at acceptere en valgfri ALL søgeord med deres INTERSECT operatør, men det gør SQLite ikke (i hvert fald ikke i skrivende stund). Du er velkommen til at tjekke SQLites dokumentation, hvis noget ændrer sig.
En alternativ forespørgsel
Det er muligt at få det samme resultat uden at bruge INTERSECT operatør. For eksempel kunne vi omskrive vores første eksempel til dette:
SELECT
DISTINCT EmployeeName
FROM Employees e
WHERE EXISTS (SELECT CustomerName FROM Customers c
WHERE e.EmployeeName = c.CustomerName); Resultat:
EmployeeName ------------ Ava Rohit Monish