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

Opérateur SQLite EXCEPT

Dans SQLite, le EXCEPT L'opérateur peut être utilisé pour créer un composé SELECT instruction qui renvoie le sous-ensemble de lignes renvoyé par le SELECT de gauche qui ne sont pas retournés par le bon SELECT .

Exemple

Supposons que nous ayons les tables suivantes :

SELECT * FROM Teachers;
SELECT * FROM Students;

Résultat :

TeacherId  TeacherName
---------  -----------
1          Warren     
2          Ben        
3          Cathy      
4          Cathy      
5          Bill       
6          Bill       

StudentId  StudentName
---------  -----------
1          Faye       
2          Jet        
3          Spike      
4          Ein        
5          Warren     
6          Bill       

Nous pouvons utiliser le EXCEPT opérateur pour renvoyer les enseignants qui ne sont pas également des étudiants :

SELECT TeacherName FROM Teachers
EXCEPT
SELECT StudentName FROM Students;

Résultat :

TeacherName
-----------
Ben        
Cathy      

Nous n'obtenons donc que les valeurs qui apparaissent dans le Teachers tableau qui n'apparaissent pas également dans le Students table.

Nous pouvons obtenir des résultats différents, selon la table qui se trouve à gauche et celle qui se trouve à droite. Voici un exemple qui met les Students table à gauche et Teachers à droite :

SELECT StudentName FROM Students
EXCEPT
SELECT TeacherName FROM Teachers;

Résultat :

StudentName
-----------
Ein        
Faye       
Jet        
Spike      

Cette fois, nous obtenons des étudiants qui ne sont pas aussi des enseignants.

EXCEPT de SQLite L'opérateur renvoie uniquement des lignes distinctes. Ainsi, dans notre exemple, une seule ligne est renvoyée pour Cathy , même s'il y a deux professeurs portant ce nom.

Certains autres SGBDR nous permettent d'inclure des doublons dans le résultat en acceptant un ALL facultatif mot-clé avec leur EXCEPT 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 alternative

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

SELECT 
    DISTINCT TeacherName
FROM Teachers t 
WHERE NOT EXISTS (SELECT StudentName FROM Students s
WHERE t.TeacherName = s.StudentName);

Résultat :

TeacherName
-----------
Ben        
Cathy