SQLite
 sql >> Base de données >  >> RDS >> SQLite

Opérateur SQLite INTERSECT

Dans SQLite, le INTERSECT L'opérateur est utilisé pour créer un composé SELECT instruction qui renvoie l'intersection des résultats des SELECT gauche et droite déclarations. En d'autres termes, il combine deux requêtes, mais ne renvoie que les lignes renvoyées dans les deux requêtes.

Exemple

Supposons que nous ayons les tables suivantes :

SELECT * FROM Employees;
SELECT * FROM Customers;

Résultat :

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      

Nous pouvons utiliser le INTERSECT opérateur pour renvoyer les employés qui sont également des clients :

SELECT EmployeeName FROM Employees
INTERSECT
SELECT CustomerName FROM Customers;

Résultat :

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

Nous n'obtenons donc que les valeurs qui apparaissent dans le Employees tableau qui apparaît également dans le Customers table.

Implémentation de SQLite de INTERSECT L'opérateur renvoie uniquement des lignes distinctes. Ainsi, l'exemple ci-dessus renvoie une seule ligne pour Monish, même s'il existe plusieurs employés et plusieurs clients portant ce nom.

D'autres SGBDR nous permettent d'inclure des doublons dans le résultat en acceptant un ALL facultatif mot-clé avec leur INTERSECT opérateur, mais pas SQLite (du moins, pas au moment de la rédaction). N'hésitez pas à consulter la documentation de SQLite au cas où quelque chose changerait.

Une requête alternative

Il est possible d'obtenir le même résultat sans utiliser le INTERSECT opérateur. Par exemple, nous pourrions réécrire notre premier exemple en ceci :

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

Résultat :

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