sql >> Databasteknik >  >> RDS >> SQLite

SQLite INTERSECT Operator

I SQLite, INTERSECT operatorn används för att skapa en sammansatt SELECT sats som returnerar skärningspunkten mellan resultaten av vänster och höger SELECT uttalanden. Med andra ord, den kombinerar två frågor, men returnerar bara de rader som returneras i båda frågorna.

Exempel

Anta att vi har följande 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 använda INTERSECT operatör att returnera anställda som också är kunder:

SELECT EmployeeName FROM Employees
INTERSECT
SELECT CustomerName FROM Customers;

Resultat:

EmployeeName
------------
Ava         
Monish      
Rohit       

Så vi får bara värden som visas i Employees tabell som också visas i Customers tabell.

SQLites implementering av INTERSECT operatören returnerar endast distinkta rader. Så exemplet ovan returnerar bara en rad för Monish, även om det finns flera anställda och flera kunder med det namnet.

Andra RDBMS tillåter oss att inkludera dubbletter i resultatet genom att acceptera en valfri ALL nyckelord med deras INTERSECT operatör, men det gör inte SQLite (åtminstone inte i skrivande stund). Kolla gärna SQLites dokumentation om något ändras.

En alternativ fråga

Det är möjligt att få samma resultat utan att använda INTERSECT operatör. Till exempel skulle vi kunna skriva om vårt första exempel till detta:

SELECT 
    DISTINCT EmployeeName
FROM Employees e
WHERE EXISTS (SELECT CustomerName FROM Customers c
WHERE e.EmployeeName = c.CustomerName);

Resultat:

EmployeeName
------------
Ava         
Rohit       
Monish      

  1. Databasmodell för ett meddelandesystem

  2. SQL-fråga för att komprimera dubbletter av värden efter datumintervall

  3. Felaktigt heltal (2147483647) har infogats i MySQL?

  4. mySQL subquery limit