© Your Copyright
Construire un arbre de requêtes répondant à la question :
- \(Q_1\) : « Rechercher le nom des joueurs qui ont été sélectionnés pour tous les matchs de leur équipe ».
TablesOpérateurs unairesOpérateurs binaires |
Vue d'ensemble | |
---|---|
|
id_equipe | nom |
---|---|
FRA | Lopez |
On peut mettre en œuvre la division relationnelle pour récupérer les noms des joueurs qui ont été sélectionnées pour tous les matchs de leur équipe en récupérant d’abord les joueurs ayant été sélectionnés :
- \(NJ=\Join_{[]}(joueurs,selections)\)
puis en les regroupant par leur nom et leur identifiant d’équipe :
GROUP BY id_equipe,nom
puis en vérifiant (clause HAVING
) que le nombre de matchs (id_match
) des joueurs sélectionnés est égal au nombre total de matchs de leur équipe :
COUNT(id_match) = (
SELECT COUNT(id_match)
FROM matchs
WHERE id_locaux=id_equipe OR id_visiteurs=id_equipe
)
Ecriture en algèbre relationnelle :
- \(Q = G_{[COUNT(id\_match) = (SELECT \; COUNT(id\_match) \; FROM \; matchs \; WHERE \; id\_locaux=id\_equipe \; OR \; id\_visiteurs=id\_equipe)]}^{(id_equipe,nom)}(\Join_{[]}(joueurs,selections))\).
Le symbole \(G\) représente l’opérateur de regroupement appliqué sur la table services
:
Arbre de requêtes : sixnations-11-3.json
- en exposant : attributs de regroupement (
GROUP BY
)- en indice : critère de restriction (clause
HAVING
) sur les regroupements.
TablesOpérateurs unairesOpérateurs binaires |
Vue d'ensemble | |
---|---|
|
id_equipe | nom |
---|---|
FRA | Lopez |