Exercice requêtes SQL : Base de Données CAFE
Objectif :
Etre capable de réaliser n'importe quelles requêtes.
Faire les requêtes SQL permettant de répondre aux demandes sur la base de données suivante:
Servir (Café, Boisson)
Fréquenter (Client, Café)
Apprécier (Client, Boisson)
Exprimer les requêtes suivantes en SQL.
- Les Cafés qui servent une Boisson Apprécier par 'Ahmed'.
- Les Clients qui vont dans les mêmes Cafés que Ahmed.
- Les Clients qui fréquentent au moins un Café où l'on sert une Boisson qu'ils aiment.
- Les Clients qui ne fréquentent aucun Café où l'ont sert une Boisson qu'ils aiment.
- Les Clients qui fréquentent tous les Cafés.
- Les Clients qui fréquentent tous les Cafés qui servent au moins une Boisson qu'ils aiment.
- Les Clients qui ne fréquentent que les Cafés qui servent une Boisson qu'ils aiment.
- Donner pour chaque Client, le nombre de Cafés servant une Boisson qu'ils aiment.
- Les Clients qui fréquentent au moins 2 Cafés où l'on sert une Boisson qu'ils aiment.
Les requêtes SQL
1- Les Cafés qui servent une Boisson Apprécier par 'Ahmed'.
SELECT Café
FROM Apprécier A, Servir S
WHERE S.Boisson = A.Boisson AND Client ='Ahmed';
2- Les Clients qui vont dans les mêmes Cafés que Ahmed.
SELECT Fréquenter.Client
FROM Fréquenter F1, Fréquenter F2
WHERE F1.Café = F2.Café AND F2.Client = 'Ahmed';
3- Les Clients qui fréquentent au moins un Café où l'on sert une Boisson qu'ils aiment.
SELECT Fréquenter.Client
FROM Fréquenter F, Apprécier A, Servir S
WHERE A.Boisson = S.Boisson AND S.Café = F.Café AND A.Client = F.Client ;
4- Les Clients qui ne fréquentent aucun Café où l'ont sert une Boisson qu'ils aiment.
SELECT Client
FROM Fréquenter F
WHERE Client NOT IN
(SELECT Client
FROM Apprécier A, Servir S
WHERE S.Café = F.Café
AND S.Boisson = A.Boisson );
5- Les Clients qui fréquentent tous les Cafés.
SELECT Client
FROM Fréquenter
WHERE Client NOT IN
(SELECT F1.Client FROM Fréquenter F1, Fréquenter F2
WHERE F1.Client NOT IN
(SELECT Client
FROM Fréquenter
WHERE Café=F2.Café)
);
6- Les Clients qui fréquentent tous les Cafés qui servent au moins une Boisson qu'ils aiment.
SELECT Client
FROM Fréquenter F
WHERE Client NOT IN
(SELECT Apprécier.Client
FROM Servir S, Apprécier A
WHERE S.Boisson=A.Boisson
AND A.Client NOT IN
(SELECT Client
FROM Fréquenter
WHERE Café=S.Café)
);
7- Les Clients qui ne fréquentent que les Cafés qui servent une Boisson qu'ils aiment.
SELECT Client
FROM Fréquenter
WHERE Client NOT IN
(SELECT Client
FROM Fréquenter F
WHERE Client NOT IN
(SELECT Client
FROM Servir S, Apprécier A
WHERE S.Café = F.Café
And S.Boisson = A.Boisson)
);
8- Donner pour chaque Client, le nombre de Cafés servant une Boisson qu'ils aiment.
SELECT Client, COUNT(DISTINCT Café)
FROM Servir S, Apprécier A
WHERE S.Boisson = A.Boisson
GROUP BY Client
9- Les Clients qui fréquentent au moins 2 Cafés où l'on sert une Boisson qu'ils aiment.
SELECT Client
FROM Servir S, Apprécier A, Fréquenter F
WHERE S.Boisson = A.Boisson AND A.Client = F.Client AND F.Café = S.Café
GROUP BY Client
HAVING COUNT(Café)>2;