sql >> Database >  >> RDS >> SQLite

SQLite INTERSECT-operator

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      

  1. Concat-groepen in SQL Server

  2. Virtuele machine verwijderen uit VirtualBox

  3. SQLite JSON_EACH()

  4. PostgreSQL 9.2.1 verbinden met Hibernate