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.

  1. Les Cafés qui servent une Boisson Apprécier par 'Ahmed'.
  2. Les Clients qui vont dans les mêmes Cafés que Ahmed.
  3. Les Clients qui fréquentent au moins un Café où l'on sert une Boisson qu'ils aiment.
  4. Les Clients qui ne fréquentent aucun Café où l'ont sert une Boisson qu'ils aiment.
  5. Les Clients qui fréquentent tous les Cafés.
  6. Les Clients qui fréquentent tous les Cafés qui servent au moins une Boisson qu'ils aiment.
  7. Les Clients qui ne fréquentent que les Cafés qui servent une Boisson qu'ils aiment.
  8. Donner pour chaque Client, le nombre de Cafés servant une Boisson qu'ils aiment.
  9. 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; 

Article publié le 12 Décembre 2011