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