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