La division
- Opérandes :
- Une relation
R
de schémaX
- Une relation
S
de schémaY
- Une relation
- Résultat :
- une relation
T
de schémaX - Y
(les attributs deY
sont retirés deX
) - ne contenant aucune des lignes
(v1, v2,..., vn)
- telles que pour chaque ligne
(w1, w2,..., wn)
deS
R
contient les lignes(v1, v2,..., vn, w1, w2,..., wn)
- une relation
- Notation :
R / S
La division
Théorie de la division
La division de R1
par R2
:
- sachant que
R1
etR2
ont au moins un attribut commun (de même nom et domaine)
produit une relation R3
:
- qui comporte les attributs appartenant à
R1
mais n’appartenant pas àR2
- et l’ensemble des tuples (lignes), qui concaténés à ceux de
R2
donnent toujours un tuple deR1
Exemples de division
Exemples de requêtes de division
Soients les relations suivantes :
1ETUDIANT (NUMET , NOM, PRENOM)2MATIERE (NUMMAT, LIBELLE)3EPREUVE (NUMEPR , NUMMAT, DATE)4INSCRIPTION (NUMET, NUMMAT)5RESULTAT (NUMET, NUMEPR , NOTE)
Questions
- Quels sont les étudiants inscrits dans toutes les matières ?
- Quels sont les étudiants ayant une note à chacune des épreuves ?
Exemples de requêtes de division
Quels sont les étudiants inscrits dans toutes les matières ?
1INSCRIPTION / MATIERE
Exemples de requêtes de division
Quels sont les étudiants ayant une note à chacune des épreuves ?
1RESULTAT / EPREUVE
La division + une jointure
La division + une jointure
Si l’on veut maintenant les noms et prénoms des étudiants ayant obtenus une note à chacune des épreuves :
1R = RESULTAT / EPREUVE2S = ETUDIANT[ NUMET, NOM, PRENOM ]3R (R.NUMET = S.NUMET) X S
Conclusion sur la division
Conclusion sur la division
- La division est une opération complexe et peu intuitive
- Cependant, elle est très utile pour certaines requêtes qui sont difficiles à implémenter en SQL
- Par exemple, les requêtes de type “pour tous” ou “pour chaque”
- En SQL, il n’existe pas d’opérateur de division, il faut utiliser des jointures complexes pour simuler la division
- Il sera donc souvent plus simple de réaliser ces requêtes d’abord en algèbre relationnelle avant de les traduire en SQL
- En algèbre relationnelle, la division est notée
R / S