V SQLite, INTERSECT
operátor se používá k vytvoření složeného SELECT
příkaz, který vrací průnik výsledků levého a pravého SELECT
prohlášení. Jinými slovy, kombinuje dva dotazy, ale vrací pouze ty řádky, které jsou vráceny v obou dotazech.
Příklad
Předpokládejme, že máme následující tabulky:
SELECT * FROM Employees;
SELECT * FROM Customers;
Výsledek:
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
Můžeme použít INTERSECT
operátor vrátit zaměstnance, kteří jsou zároveň zákazníky:
SELECT EmployeeName FROM Employees
INTERSECT
SELECT CustomerName FROM Customers;
Výsledek:
EmployeeName ------------ Ava Monish Rohit
Získáváme tedy pouze hodnoty, které se objevují v Employees
tabulka, která se také objeví v Customers
stůl.
SQLite implementace INTERSECT
operátor vrací pouze odlišné řádky. Výše uvedený příklad tedy vrátí pouze jeden řádek pro Monish, i když existuje více zaměstnanců a více zákazníků s tímto jménem.
Jiné RDBMS nám umožňují zahrnout duplikáty do výsledku přijetím volitelného ALL
klíčové slovo s jejich INTERSECT
operátor, ale SQLite ne (alespoň ne v době psaní). Pro případ, že by se něco změnilo, neváhejte zkontrolovat dokumentaci SQLite.
Alternativní dotaz
Stejný výsledek je možné získat i bez použití INTERSECT
operátor. Například bychom mohli přepsat náš první příklad na toto:
SELECT
DISTINCT EmployeeName
FROM Employees e
WHERE EXISTS (SELECT CustomerName FROM Customers c
WHERE e.EmployeeName = c.CustomerName);
Výsledek:
EmployeeName ------------ Ava Rohit Monish