© Your Copyright
L’objectif de ces exercices est de savoir regrouper le informations et appliquer des fonctions d’agrégat sur ces regroupements « Aux pays des bières ».
Construire un arbre de requêtes répondant à la question :
- \(Q_1\) : « Rechercher le nom, la couleur des bières et leur quantité en stock dans la base de données ».
TablesOpérateurs unairesOpérateurs binaires |
Vue d'ensemble | |
---|---|
|
biere | couleur | sum(stock) |
---|---|---|
Bush | Blonde | 1510 |
Guinness | Brune | 250 |
Heineken | Blonde | 50 |
Kanterbrau | Blonde | 20 |
Kronenbourg | Blonde | 1100 |
Kronenbourg | Brune | 20 |
Newcastle | Rousse | 10 |
Spaten | Blonde | 5010 |
On récupère d’abord les services
de bieres
:
- \(NJ = \Join_{[]}(services, bieres)\).
puis on fait un regroupement par nom et couleur des bières servies
en appliquant la fonction d’aggrégat pour calculer la somme des stocks
de bières (SUM(stock)
sur les regroupements :
- \(G = G_{[]}^{(biere,couleur,SUM(stock))}(NJ)\).
Ecriture en algèbre relationnelle :
Arbre de requêtes : bars-16.json
- \(G = G_{[]}^{(biere,couleur,SUM(stock))}(\Join_{[]}(services, bieres))\).
TablesOpérateurs unairesOpérateurs binaires |
Vue d'ensemble | |
---|---|
|
biere | couleur | sum(stock) |
---|---|---|
Bush | Blonde | 1510 |
Guinness | Brune | 250 |
Heineken | Blonde | 50 |
Kanterbrau | Blonde | 20 |
Kronenbourg | Blonde | 1100 |
Kronenbourg | Brune | 20 |
Newcastle | Rousse | 10 |
Spaten | Blonde | 5010 |
Construire un arbre de requêtes répondant à la question :
- \(Q_1\) : « Rechercher le nom des bars, le nombre de bières qu’ils servent et la somme de leur stocks pour les bars qui servent au moins deux bières ».
TablesOpérateurs unairesOpérateurs binaires |
Vue d'ensemble | |
---|---|
|
id_bar | bar | bar:1 | COUNT(id_biere) | SUM(stock) |
---|---|---|---|---|
1 | Bar du Coin | Bar du Coin | 8 | 1370 |
2 | Corners Pub | Corners Pub | 2 | 1600 |
On récupère d’abord les services
des bars
:
- \(NJ = \Join_{[]}(services, bars)\).
puis on fait un regroupement par nom de bars en ne retenant dans les regroupements que les bars qui servent au moins 2 bières :
GROUP BY bar
HAVING COUNT(id_biere) > 1
On applique sur ces regroupements les fonctions d’agrégat pour pouvoir compter
le nombre de bières servies (COUNT(id_biere)
) et calculer la somme des stocks (SUM(stock)
) dans ces bars.
Ecriture en algèbre relationnelle :
Arbre de requêtes : bars-17.json
- \(G = G_{[COUNT(id\_biere) > 1]}^{(bar,COUNT(id\_biere),SUM(stock))}(\Join_{[]}(services, bars))\).
TablesOpérateurs unairesOpérateurs binaires |
Vue d'ensemble | |
---|---|
|
id_bar | bar | bar:1 | COUNT(id_biere) | SUM(stock) |
---|---|---|---|---|
1 | Bar du Coin | Bar du Coin | 8 | 1370 |
2 | Corners Pub | Corners Pub | 2 | 1600 |
Construire un arbre de requêtes répondant à la question :
- \(Q_1\) : « Rechercher le nom des pays, le nombre de toutes les bières servies dans ces pays et la somme de leurs stocks, pour les pays dont la quantité de bières est supérieure à la moyenne des stocks mondiaux ».
TablesOpérateurs unairesOpérateurs binaires |
Vue d'ensemble | |
---|---|
|
On récupère d’abord les services
des bars
:
- \(NJ = \Join_{[]}(services, bars)\).
puis on fait un regroupement par nom de bars en ne retenant
dans les regroupements que les bars dont la quantité de bières est supérieure à la moyenne des stocks mondiaux.
Il faut donc faire une requête imbriquée dans la clause HAVING
pour calculer la moyenne des stocks de bières servies
et vérifier qu’elle est supérieure à la somme des stocks de chaque bar regroupé :
GROUP BY bar
HAVING SUM(stock) > SELECT AVG(stock) FROM services)
On obtient dans le résultat final le nom des pays, le nombre de bières et la somme des SUM(stock)
servies dans ces pays
.
Ecriture en algèbre relationnelle :
Arbre de requêtes : bars-18.json
- \(NJ = \Join_{[]}(services, bars)\).
- \(G = G_{[SUM(stock) \; > \; (SELECT \; AVG(stock) \; FROM \; services)]}^{(pays,COUNT(id\_biere),SUM(stock))}(NJ)\).
TablesOpérateurs unairesOpérateurs binaires |
Vue d'ensemble | |
---|---|
|
Construire un arbre de requêtes répondant à la question :
- \(Q_1\) : « Rechercher le nom des bars, le nombre de toutes les bières servies dans ces bars et la somme de leurs stocks, pour les bars de “France” ou des “USA” servant plus d’une bière ».
TablesOpérateurs unairesOpérateurs binaires |
Vue d'ensemble | |
---|---|
|
bar | COUNT(id_biere) | SUM(stock) |
---|---|---|
Bar du Coin | 8 | 1370 |
Corners Pub | 2 | 1600 |
On vérifie d’abord que les bars
sont bien en 'France'
ou aux 'USA'
:
- \(R = \sigma{[pays ='France' \; OR \; pays='USA']}(bars)\)
On récupère ensuite les services de bars de ces deux pays
- \(NJ = \Join{[]}(services,R)\)
Puis on fait un regroupement (GROUP BY
) par nom (bar
) de bars.
On ne retient dans ce regroupement que les bars
dont le nombre de bières est supérieur à la moyenne des stocks mondiaux.
On récupère dans le résultat final le nom des bars (l’attribut de groupement bar
), le nombre (COUNT(id_biere))
)
de bières qu’ils servent et la somme (SUM(stock)
) des stock
de bières servies dans ces bars.
Arbre de requêtes : bars-19.json
- \(G = G_{[SUM(stock)> (SELECT COUNT (id_biere) > 1)]}^{(bar,COUNT(id\_biere),SUM(stock))}(NJ)\).
TablesOpérateurs unairesOpérateurs binaires |
Vue d'ensemble | |
---|---|
|
bar | COUNT(id_biere) | SUM(stock) |
---|---|---|
Bar du Coin | 8 | 1370 |
Corners Pub | 2 | 1600 |