SQL avancé
SQL avancé : jointures, agrégats, GROUP BY/HAVING, sous-requêtes, mises à jour et transactions, illustrés par un tableau de bord commercial.
Rédigé par l'équipe éditoriale de RévisionBac d'après le programme officiel · Mis à jour le · Méthodologie
En clair. Les requêtes avancées croisent plusieurs tables et calculent des totaux par groupe.
Ce qu'on te demande au bac STMG : utiliser jointures, GROUP BY et fonctions d'agrégat pour répondre à une question de gestion.
Exemple simple. Le chiffre d'affaires par vendeur s'obtient par un regroupement sur le vendeur.
1. Rappels de vocabulaire
- SGBDR : système de gestion de bases de données relationnelles (MySQL, PostgreSQL, SQLite).
- Table : ensemble de lignes (enregistrements) décrites par des attributs (colonnes).
- Clé primaire : attribut qui identifie une ligne de façon unique.
- Clé étrangère : attribut qui référence la clé primaire d'une autre table et garantit l'intégrité référentielle.
- SQL se décompose en LDD (CREATE, ALTER, DROP) et LMD (SELECT, INSERT, UPDATE, DELETE).
2. Structure d'une requête d'interrogation
SELECT colonnes / fonctions
FROM table
JOIN autre_table ON condition
WHERE condition sur les lignes
GROUP BY colonnes
HAVING condition sur les groupes
ORDER BY colonnes ASC|DESC
LIMIT n;
L'ordre logique d'exécution est FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY : c'est pourquoi un alias défini dans le SELECT n'est pas utilisable dans le WHERE.
3. Les jointures
- INNER JOIN : uniquement les lignes ayant une correspondance dans les deux tables.
- LEFT JOIN : toutes les lignes de la table de gauche, complétées par NULL à droite si aucune correspondance — indispensable pour repérer les clients sans commande.
- Auto-jointure : une table jointe à elle-même (hiérarchie salarié/manager).
SELECT c.nom, COUNT(cmd.id) AS nb_commandes
FROM client c
LEFT JOIN commande cmd ON cmd.client_id = c.id
GROUP BY c.id, c.nom
ORDER BY nb_commandes DESC;
4. Agrégats et regroupements
Fonctions : COUNT(), SUM(), AVG(), MIN(), MAX().
SELECT p.categorie,
COUNT(*) AS nb,
ROUND(AVG(p.prix),2) AS prix_moyen,
SUM(p.stock * p.prix) AS valeur_stock
FROM produit p
GROUP BY p.categorie
HAVING COUNT(*) >= 3
ORDER BY valeur_stock DESC;
Règle d'or : WHERE filtre les lignes avant regroupement, HAVING filtre les groupes après.
5. Sous-requêtes
-- Produits plus chers que la moyenne générale
SELECT nom, prix FROM produit
WHERE prix > (SELECT AVG(prix) FROM produit);
-- Clients ayant commandé en 2026
SELECT nom FROM client
WHERE id IN (SELECT client_id FROM commande
WHERE date_cmd >= '2026-01-01');
6. Mises à jour et transactions
INSERT INTO commande (client_id, date_cmd, montant)
VALUES (12, '2026-03-04', 249.90);
UPDATE produit SET prix = prix * 1.05 WHERE categorie = 'Textile';
DELETE FROM commande WHERE montant IS NULL;
Une transaction (BEGIN … COMMIT / ROLLBACK) garantit les propriétés ACID : atomicité, cohérence, isolation, durabilité. Un virement bancaire (débit + crédit) doit être atomique, sinon de l'argent disparaît.
7. Cas de gestion : tableau de bord commercial
Objectif : chiffre d'affaires mensuel par commercial.
SELECT s.nom,
STRFTIME('%Y-%m', c.date_cmd) AS mois,
SUM(c.montant) AS ca
FROM commande c
JOIN salarie s ON s.id = c.salarie_id
WHERE c.date_cmd >= '2026-01-01'
GROUP BY s.nom, mois
ORDER BY mois, ca DESC;
Ce résultat alimente un tableau croisé et le calcul d'écarts par rapport aux objectifs (contrôle de gestion).
8. Erreurs fréquentes
- Oublier la condition de jointure → produit cartésien (des milliers de lignes fausses).
- Mettre un agrégat dans le WHERE au lieu du HAVING.
- Utiliser
= NULLau lieu deIS NULL. - Exécuter un UPDATE ou DELETE sans WHERE : toute la table est modifiée.
À retenir
- Un SELECT complet suit l'ordre FROM/WHERE/GROUP BY/HAVING/SELECT/ORDER BY.
- INNER JOIN = intersection, LEFT JOIN = tout à gauche.
- WHERE avant regroupement, HAVING après ; transactions pour l'intégrité.
Sources et références
Ce cours est rédigé par l'équipe RévisionBac à partir du programme officiel et des sources institutionnelles ci-dessous. Elles permettent de vérifier les définitions, les chiffres et les normes citées.
- 1.Programmes et ressources du lycée général et technologique — Éduscol — Ministère de l'Éducation nationale
- 2.Bulletin officiel de l'Éducation nationale (programmes du baccalauréat) — education.gouv.fr
- 3.Protection des données personnelles (RGPD) — CNIL
- 4.Bonnes pratiques de cybersécurité — ANSSI
- 5.Textes de loi et jurisprudence — Légifrance
Contenu vérifié et mis à jour le 09/09/2026. Les liens renvoient vers les sites officiels des éditeurs cités.
Historique éditorial
Ce chapitre est rédigé et relu par l'équipe RévisionBac, puis enrichi par les contributions validées.
- — Dernière mise à jour du cours (relecture et enrichissement)
- — Première publication de la fiche de cours