Partie I
SQL de base
144
© Éditions Eyrolles
L’opérateur de différence (programmé avec NOT IN) combiné à la fonction EXISTS permet
de programmer ces deux comparaisons (un ensemble inclus dans un autre et une égalité
d’ensembles). Il existe d’autres solutions à base de regroupements et de sous-interrogations
(synchronisées ou pas) que nous n’étudierons pas, parce qu’elles me semblent plus compliquées. Écrivons à présent ces deux divisions à l’aide de requêtes SQL.
Division inexacte
Pour programmer le fait qu’un ensemble est seulement inclus dans un autre (ici A ⊂ B), il faut
qu’il n’existe pas d’élément dans l’ensemble {A-B}. La différence se programme à l’aide de
l’opérateur NOT IN, l’inexistence d’élément se programme à l’aide de la fonction NOT
EXISTS comme le montre la requête suivante :
Division exacte
Pour programmer le fait qu’un ensemble est strictement égal à un autre (ici A=B), il faut qu’il
n’existe ni d’élément dans l’ensemble {A-B} ni dans l’ensemble {B-A}. La traduction mathématique est la suivante : A=B⇔(A-B=∅ et B-A=∅). Les opérateurs se programment de la
même manière que pour la requête précédente. Le « et » se programme avec un AND.
Figure 4-22 Divisions à programmer
Web
Affretements
immat
typeAv
compa
dateAff
A1
A320
SING
1965 -05-13
A2
A340
AF
1968 -06-22
A3
Mercure
AF
1965 -02-05
A4
A330
ALIB
1965 -01-16
A3
Mercure
ALIB
1942 -03-05
A3
Mercure
SING
1987 -03-01
Compagnie
comp nomComp
pays
AF
Air France
F
ALIB
Air Lib
F
SING Singapore AL
SG
Résultat
immat
typeAv
A3
Mercure
SELECT DISTINCT immat, typeAv FROM Affretements aliasAff
WHERE NOT EXISTS
(SELECT DISTINCT comp FROM Compagnie WHERE pays = 'F'
AND comp NOT IN
( SELECT compa FROM Affr etements WHERE immat = aliasAff.immat ));
Ensemble A de référence
Ensemble B à comparer
Parcours de tous les avions
Précédent

- 166/418

Suivant