sql >> Databáze >  >> RDS >> SQLite

Operátor SQLite INTERSECT

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      

  1. Jak najít název omezení v PostgreSQL

  2. Význam transakčního protokolu na SQL Serveru

  3. Sběr dat data a času

  4. Jak funguje GREATEST() v MariaDB