Le schéma fioul
participant(id, nom, email, commune) · fournisseur(id, nom, ville) · campagne(id, libelle, commune, prix_litre, statut, fournisseur_id) · commande(id, participant_id, campagne_id, litres, statut). Le script complet est au sommaire.
SELECT & WHERE
A. Les campagnes ouvertes dont le prix au litre est inférieur à 1,15 €, triées par prix croissant.
Solution A
SELECT libelle, prix_litre FROM campagne WHERE statut = 'OUVERTE' AND prix_litre < 1.15 ORDER BY prix_litre;
B. Les participants dont l'email est renseigné et se termine par .fr.
Solution B
SELECT nom, email FROM participant WHERE email IS NOT NULL AND email LIKE '%.fr';
Jointures
C. Pour chaque commande confirmée : le nom du participant, le libellé de la campagne et le nombre de litres.
Solution C
SELECT p.nom, ca.libelle, c.litres FROM commande c JOIN participant p ON c.participant_id = p.id JOIN campagne ca ON c.campagne_id = ca.id WHERE c.statut = 'CONFIRMEE';
D. Les fournisseurs qui n'ont encore aucune campagne.
Solution D
SELECT f.nom FROM fournisseur f LEFT JOIN campagne ca ON ca.fournisseur_id = f.id WHERE ca.id IS NULL;
Agrégations
E. Le volume total commandé par commune, du plus élevé au plus faible.
Solution E
SELECT ca.commune, SUM(c.litres) AS volume FROM commande c JOIN campagne ca ON c.campagne_id = ca.id GROUP BY ca.commune ORDER BY volume DESC;
F — défi. Les campagnes ayant atteint le palier de 5000 L, avec leur nombre de participants.
Solution F
SELECT ca.libelle, COUNT(c.id) AS nb, SUM(c.litres) AS volume FROM campagne ca JOIN commande c ON c.campagne_id = ca.id GROUP BY ca.id, ca.libelle HAVING volume >= 5000 ORDER BY volume DESC;
Ces requêtes sont exactement celles dont l'appli a besoin : liste filtrée des campagnes, détail des inscriptions, et surtout le suivi du palier. Les refaire en SQL éclaire ce que fait l'agrégation MongoDB côté projet.
- SELECT/WHERE, jointures et agrégations couvrent l'essentiel des besoins d'une appli.
- LEFT JOIN + IS NULL : le motif pour trouver les « sans lien » (orphelins).
- GROUP BY + HAVING : le motif du suivi de palier.