In SQLite, de INTERSECT
operator wordt gebruikt om een samengestelde SELECT
te maken statement dat het snijpunt van de resultaten van de linker en rechter SELECT
. geeft verklaringen. Met andere woorden, het combineert twee query's, maar retourneert alleen die rijen die in beide query's worden geretourneerd.
Voorbeeld
Stel dat we de volgende tabellen hebben:
SELECT * FROM Employees;
SELECT * FROM Customers;
Resultaat:
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
We kunnen de INTERSECT
. gebruiken operator om werknemers terug te sturen die ook klant zijn:
SELECT EmployeeName FROM Employees
INTERSECT
SELECT CustomerName FROM Customers;
Resultaat:
EmployeeName ------------ Ava Monish Rohit
We krijgen dus alleen waarden die voorkomen in de Employees
tabel die ook verschijnen in de Customers
tafel.
SQLite's implementatie van de INTERSECT
operator retourneert alleen afzonderlijke rijen. Dus het bovenstaande voorbeeld retourneert slechts één rij voor Monish, ook al zijn er meerdere werknemers en meerdere klanten met die naam.
Met andere RDBMS'en kunnen we duplicaten in het resultaat opnemen door een optionele ALL
. te accepteren trefwoord met hun INTERSECT
operator, maar SQLite niet (tenminste, niet op het moment van schrijven). Voel je vrij om de documentatie van SQLite te raadplegen voor het geval er iets verandert.
Een alternatieve zoekopdracht
Het is mogelijk om hetzelfde resultaat te krijgen zonder de INTERSECT
exploitant. We zouden ons eerste voorbeeld hier bijvoorbeeld naar kunnen herschrijven:
SELECT
DISTINCT EmployeeName
FROM Employees e
WHERE EXISTS (SELECT CustomerName FROM Customers c
WHERE e.EmployeeName = c.CustomerName);
Resultaat:
EmployeeName ------------ Ava Rohit Monish