La différence porte sur deux relations de même schéma, ou ayant des attributs en commun.
La relation résultat possède les attributs de la relation d’origine et les n-uplets de la première relation qui n’appartiennent pas à la deuxième.
NOTA : DIFFERENCE (R1, R2) ne donne pas le même résultat que DIFFERENCE (R2, R1).
L’union s’exprime de plusieurs manières en SQL :
-
Avec le mot clé IN
SELECT table1.champ1, table1.champ2, …
FROM table1
WHERE table1.champ1 NOT IN (SELECT table2.champ1 FROM table2)
-
Avec le mot clé EXISTS
SELECT table1.champ1, table1.champ2, … FROM table1 WHERE NOT EXISTS
(
SELECT * FROM table2 WHERE table1.champ1=table2.champ1
)
-
Avec une jointure externe
SELECT table1.champ1, table1.champ2, …
FROM table1
LEFT JOIN table2 ON table1.champ1 = table2.champ1
WHERE table2.champ1 IS NULL
Exemple de différence
On veut avoir une liste contenant les étudiants anglophones qui ne parlent pas français
EtudiantsFrancophones | Matricule | Nom | EtudiantsAnglophones | Matricule | Nom | |
1 | Daouda | 1 | Daouda | |||
2 | Fouda | 4 | Lobe | |||
3 | Kamdem |
Résultat de la différence : EtudiantsAnglophones – EtudiantsFrancophones
DifferenceEtudiantsAetF | Matricule | Nom |
4 | Lobe |
Traduction en SQL
SELECT * FROM EtudiantsAnglophones
WHERE EtudiantsAnglophones.Matricule NOT IN
(
SELECT EtudiantsFrancophones.Matricule FROM EtudiantsFrancophones
)