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