Les sous-requêtes
Une sous-requête est une requête imbriquée. Elle renvoie une valeur, une liste ou une table.
-- campagnes moins chères que la moyenne SELECT libelle, prix_litre FROM campagne WHERE prix_litre < (SELECT AVG(prix_litre) FROM campagne); -- participants ayant au moins une commande SELECT nom FROM participant WHERE id IN (SELECT participant_id FROM commande);
Quantificateurs & EXISTS
-- EXISTS : teste la simple existence (souvent le plus efficace)
SELECT p.nom FROM participant p
WHERE EXISTS (SELECT 1 FROM commande c WHERE c.participant_id = p.id);
Sous-requête corrélée — ici la sous-requête référence
p.id de la requête externe : elle s'évalue pour chaque ligne externe. Puissant, à surveiller sur gros volumes.UNION
UNION empile deux résultats (mêmes colonnes) et dédoublonne ; UNION ALL garde les doublons et va plus vite.
SELECT nom, 'participant' AS type FROM participant UNION SELECT nom, 'fournisseur' FROM fournisseur;
Fonctions intégrées
-- texte / nombres / dates / conditions
SELECT
UPPER(nom) AS maj,
ROUND(prix_litre * 1000, 2) AS prix_1000L,
DATE_FORMAT(date_cloture, '%d/%m/%Y') AS cloture_fr,
DATEDIFF(date_cloture, CURDATE()) AS jours_restants,
IFNULL(email, 'non renseigné') AS email2,
CASE WHEN prix_litre < 1.10 THEN 'promo' ELSE 'standard' END AS gamme
FROM campagne ca JOIN participant p ON 1=1 LIMIT 5;
Retenez surtout : CONCAT, SUBSTRING, TRIM (texte) ; ROUND, CEIL, MOD (nombres) ; NOW, YEAR, DATE_ADD (dates) ; IFNULL, COALESCE, CASE (conditions).
🛢️ Sur le projet Fioul Groupé
« Jours restants avant clôture » et « étiquette promo » sont des colonnes calculées que l'API renvoie au front pour l'afficher directement :
SELECT libelle,
DATEDIFF(date_cloture, CURDATE()) AS jours_restants,
CASE WHEN prix_litre < (SELECT AVG(prix_litre) FROM campagne)
THEN 'Bon plan' ELSE 'Standard' END AS badge
FROM campagne WHERE statut = 'OUVERTE';À retenir
- Une sous-requête s'imbrique dans une autre (valeur, liste ou table).
- EXISTS teste l'existence ; une sous-requête corrélée s'évalue par ligne.
- UNION empile deux SELECT compatibles (ALL garde les doublons).
- Fonctions clés : CONCAT, ROUND, DATE_FORMAT, IFNULL/COALESCE, CASE.