Sciences de gestion et numérique · Première STMGBac
Bases de données et requêtes : cours de 1re STMG
Publié le 10 novembre 2026 · Mis à jour le 10 novembre 2026 · Signaler une erreur
L'essentiel
- Une base de données range des informations structurées dans des tables : une ligne = un enregistrement, une colonne = un champ.
- La clé primaire identifie chaque ligne ; la clé étrangère relie une table à une autre dans une base relationnelle.
- Le SGBD gère la base ; on l'interroge par des requêtes : choisir des colonnes (SELECT), filtrer (WHERE), trier (ORDER BY).
- Les fonctions COUNT, SUM, AVG, MIN, MAX calculent sur plusieurs lignes ; GROUP BY calcule par groupe.
- Une jointure réunit deux tables grâce à la clé étrangère pour répondre à une question qui touche les deux.
- Des données ouvertes sont publiées en accès libre : on peut les interroger comme une base ou les traiter dans un tableur.
Pourquoi organiser les données dans une base
Une entreprise de vente en ligne reçoit chaque jour des dizaines de commandes. Chaque commande contient le nom d'un client, une adresse, des produits, un montant, une date. Si tout est noté dans des fichiers séparés ou des cahiers, retrouver « toutes les commandes de septembre supérieures à 100 euros » devient long et source d'erreurs.
La solution : ranger ces données dans une base de données, c'est-à-dire un ensemble organisé de données que l'on peut consulter, mettre à jour et croiser rapidement. Dans ce chapitre, tu apprends comment une base est construite, puis comment on lui pose des questions grâce aux requêtes.
Dans les activités de gestion, l'information circule dans le système d'information de l'organisation, qui la transforme en véritable ressource stratégique. 3 Mais une information n'est utile que si l'on sait la retrouver et la trier. Une base de données bien conçue et des requêtes bien écrites servent exactement à cela : passer de la simple donnée brute à une information utile pour décider.
| id_client | nom | ville |
|---|---|---|
| 1 | Durand | Lyon |
| 2 | Martin | Nantes |
| 3 | Bernard | Lyon |
| 4 | Petit | Lille |
| 5 | Moreau | Nantes |
| num_commande | id_client | date_commande | montant |
|---|---|---|---|
| 101 | 1 | 2026-09-03 | 120 |
| 102 | 2 | 2026-09-05 | 45 |
| 103 | 1 | 2026-09-12 | 80 |
| 104 | 3 | 2026-10-01 | 200 |
| 105 | 5 | 2026-10-02 | 60 |
| 106 | 3 | 2026-10-10 | 150 |
Le vocabulaire d'une base : table, champ, enregistrement
Dans la table CLIENT du fil rouge, les champs sont id_client, nom et ville. Il y a cinq enregistrements, un par client. Dans la table COMMANDE, les champs sont num_commande, id_client, date_commande et montant, et il y a six enregistrements.
Chaque champ a un type : nombre entier, nombre décimal, texte, date. Le type compte, car il décide de ce qu'on peut faire avec le champ. On peut additionner des montants, pas des noms ; on peut trier des dates dans l'ordre du calendrier si elles sont enregistrées comme des dates.
Base relationnelle et clé étrangère
Pourquoi deux tables plutôt qu'une seule ? Imagine un grand tableau unique où chaque commande répète le nom, la ville et l'adresse du client. Le client Bernard a passé deux commandes : ses informations seraient écrites deux fois. S'il déménage, il faudrait corriger chaque ligne, avec le risque d'en oublier une et de se retrouver avec deux adresses différentes pour la même personne.
On évite ce défaut en séparant les données : les informations du client sont écrites une seule fois dans CLIENT, et chaque commande renvoie au client par son numéro.
Le SGBD et la notion de requête
Pour écrire une requête, on utilise un langage compris par le SGBD. Le plus répandu pour les bases relationnelles s'appelle SQL. Il se lit presque comme de l'anglais simple. Au niveau de la première STMG, l'objectif est de comprendre ce que fait une requête et de savoir l'écrire ou la compléter dans des cas simples, pas de connaître toutes les subtilités du langage.
Une requête de consultation répond à la forme suivante :
SELECT champs_à_afficher
FROM table
WHERE condition
ORDER BY champ;
Seuls SELECT et FROM sont obligatoires. WHERE et ORDER BY s'ajoutent selon la question posée.
- FROMChoisir la table où chercher
- WHEREGarder les lignes qui remplissent la condition
- SELECTAfficher seulement les colonnes demandées
- ORDER BYTrier le résultat selon un champ
Sélectionner, filtrer et trier
Les conditions utilisent des opérateurs de comparaison : = (égal), <> (différent), <, >, <=, >=. On les combine avec AND (les deux conditions doivent être vraies) ou OR (au moins une des deux).
SELECT num_commande, montant
FROM COMMANDE
WHERE montant > 100 AND date_commande >= '2026-10-01';
Cette requête garde les commandes de plus de 100 € passées à partir du 1er octobre 2026 : ce sont la 104 (200 €) et la 106 (150 €). La commande 101 vaut 120 € mais date de septembre ; elle ne passe pas la seconde condition.
Calculer sur plusieurs lignes : agrégats et regroupements
Souvent, on veut un résultat par groupe : le total des achats de chaque client, par exemple. On utilise alors GROUP BY.
SELECT id_client, SUM(montant)
FROM COMMANDE
GROUP BY id_client;
Le SGBD forme un groupe par valeur de id_client, puis calcule la somme dans chaque groupe. Résultat : client 1 → 200 ; client 2 → 45 ; client 3 → 350 ; client 5 → 60. Le client 4 n'apparaît pas, car il n'a passé aucune commande.
Croiser deux tables : la jointure
Que faire si la question touche les deux tables ? Par exemple : « Quels sont les noms des clients qui ont passé une commande de plus de 100 € ? » Les montants sont dans COMMANDE, les noms dans CLIENT. Il faut joindre les deux tables grâce au lien entre clé étrangère et clé primaire.
Données ouvertes et requêtes dans les organisations
Les organisations n'exploitent pas seulement leurs propres bases. Des données ouvertes (open data) sont publiées en accès libre, et le site gouvernemental data.gouv.fr en centralise les principales. 3 Parmi les exemples étudiés en sciences de gestion, il existe des données ouvertes sur les produits alimentaires qui permettent de connaître leurs ingrédients. 3 On trouve aussi des données mises à disposition par des métropoles, dont la plupart sont libres d'accès. 3
Ces ensembles de données se présentent souvent sous forme de tableaux : une ligne par objet, une colonne par caractéristique, exactement comme une table. On peut donc les ouvrir dans un tableur, les filtrer et les trier, ou les intégrer dans une base pour les interroger. 3 Les notions du chapitre se retrouvent partout : repérer les champs, comprendre ce que représente une ligne, formuler la question sous forme de condition.
Exercices corrigés
Exercice 1 Compter les grosses commandes
La table COMMANDE contient six commandes, de montants 120, 45, 80, 200, 60 et 150 euros.
On exécute :
SELECT COUNT(*)
FROM COMMANDE
WHERE montant >= 100;
Quelle valeur la requête renvoie-t-elle ?
Indice 1
Le WHERE filtre d'abord ; COUNT compte ensuite les lignes restantes.
Indice 2
Repère les montants qui valent 100 ou plus.
Voir la correction pas à pas
Le
WHEREgarde les lignes dont le montant est supérieur ou égal à 100.Parmi 120, 45, 80, 200, 60 et 150, les montants retenus sont 120, 200 et 150.
COUNT(*)compte ces lignes : trois.
La requête renvoie 3. Le filtre agit avant le comptage.
Exercice 2 Total d'un client
Dans la boutique, les commandes du client 3 sont la 104 (200 €) et la 106 (150 €). Les autres clients ont d'autres commandes.
- Écris la requête qui calcule le total des montants des commandes du client numéro 3.
- Donne le résultat en euros.
Indice 1
Utilise SUM et une condition sur id_client.
Indice 2
N'additionne que les commandes du client 3.
Voir la correction pas à pas
Le champ à additionner est
montant, dans la table COMMANDE :SELECT SUM(montant) FROM COMMANDE.Le critère porte sur le client : on ajoute
WHERE id_client = 3.Requête complète :
SELECT SUM(montant) FROM COMMANDE WHERE id_client = 3;Calcul : 200 + 150 = 350 euros.
Le total des commandes du client 3 est de 350 euros.
Exercice 3 Écrire une requête avec jointure
On veut la liste des noms des clients de Nantes avec le montant de chacune de leurs commandes, triée du montant le plus faible au plus élevé.
Écris la requête SQL, puis donne le résultat.
Rappel : les clients de Nantes sont Martin (id 2) et Moreau (id 5) ; la commande 102 (Martin) vaut 45 € et la commande 105 (Moreau) vaut 60 €.
Indice 1
Le nom est dans CLIENT, le montant dans COMMANDE : il faut une jointure sur id_client.
Indice 2
Pense à ORDER BY, croissant par défaut.
Voir la correction pas à pas
Les champs à afficher sont
CLIENT.nometCOMMANDE.montant.On relie les tables :
FROM CLIENT JOIN COMMANDE ON CLIENT.id_client = COMMANDE.id_client.On filtre sur la ville :
WHERE CLIENT.ville = 'Nantes'.On trie par montant croissant :
ORDER BY COMMANDE.montant.Résultat : Martin 45, puis Moreau 60.
La requête complète est :
SELECT CLIENT.nom, COMMANDE.montant
FROM CLIENT
JOIN COMMANDE ON CLIENT.id_client = COMMANDE.id_client
WHERE CLIENT.ville = 'Nantes'
ORDER BY COMMANDE.montant;
Elle renvoie Martin (45 €) puis Moreau (60 €).
Quiz
8 questions · correction immédiate · ton score reste sur ton appareil.
-
Une ligne est un enregistrement. Le champ désigne au contraire une colonne, c'est-à-dire une caractéristique commune à toutes les lignes ; la tentation de répondre « champ » vient de la confusion entre ligne et colonne.
-
id_clientest un numéro unique attribué à chaque client. Le nom et la ville peuvent se répéter (deux clients de Lyon, deux Martin), donc ils ne permettent pas d'identifier une ligne de façon certaine. -
Un champ qui reprend la clé primaire d'une autre table est une clé étrangère. Dans COMMANDE, la clé primaire reste
num_commande. La jointure est l'opération qui exploite ce lien, pas le champ lui-même. -
On affiche
nom(SELECT), depuis CLIENT (FROM), avec la condition surville(WHERE). La première inverse les champs, la troisième interroge une table qui n'a pas de champville, la dernière oublie la clause FROM. -
Il suffit qu'une des deux conditions soit vraie : c'est le rôle de
OR. AvecAND, la ville devrait être Lyon et Nantes en même temps, ce qui est impossible et ne donnerait aucune ligne. -
On additionne tous les montants : 120 + 45 + 80 + 200 + 60 + 150 = 655. Ne pas confondre avec
COUNT(*), qui compterait les lignes et donnerait 6. -
Faux. Sans condition, chaque client est associé à chaque commande : 5 × 6 = 30 lignes. L'addition 5 + 6 = 11 est l'erreur tentante, mais une jointure sans critère multiplie les lignes au lieu de les additionner.
-
Le SGBD stocke les données, contrôle les accès et exécute les requêtes. Il ne remplace pas la clé primaire, qui est un champ de la structure de la table, et il ne se réduit pas à un tableur, car il gère des liens entre tables et des accès simultanés.
Les questions qu'on se pose
Quelle est la différence entre une base de données et un SGBD ?
La base de données contient les données, organisées en tables. Le SGBD est le logiciel qui la gère : il stocke, protège et exécute les requêtes. Une base sans SGBD serait un simple fichier difficile à interroger.
Faut-il savoir écrire du SQL parfaitement au bac ?
L'objectif est surtout de comprendre ce que fait une requête et de savoir l'écrire ou la compléter dans des cas simples (SELECT, FROM, WHERE, tri, calcul, jointure). Entraîne-toi à lire une requête et à prédire son résultat sur un petit tableau, comme dans les exercices.
Pourquoi ne pas tout mettre dans une seule table ?
Les informations se répéteraient à chaque ligne. Une modification (nouvelle adresse) demanderait de corriger de nombreuses lignes, avec un risque d'incohérence. Avec des tables reliées par une clé étrangère, chaque information est écrite une seule fois.
Comment savoir s'il faut une jointure ?
Relis la question et repère les champs demandés ou utilisés dans les conditions. Si ces champs se trouvent dans deux tables différentes (un nom dans CLIENT, un montant dans COMMANDE), une jointure est nécessaire, avec la condition d'égalité entre clé étrangère et clé primaire.
Quelle différence entre WHERE et GROUP BY ?
WHERE filtre des lignes avant tout calcul. GROUP BY regroupe les lignes qui ont la même valeur dans un champ pour calculer un résultat par groupe, par exemple un total par client.
Sources
Programme visé : Programme de Sciences de gestion et numérique - Première STMG · Ministère de l'Éducation nationale (Bulletin officiel spécial n°1 du 22 janvier 2019)
- Programme de Sciences de gestion et numérique - Première STMG, Ministère de l'Éducation nationale (Bulletin officiel spécial n°1 du 22 janvier 2019). Consulté le 10 novembre 2026.
- Programmes et ressources en série STMG - Éduscol, Éduscol - Ministère de l'Éducation nationale. Consulté le 10 novembre 2026.
- Ressources Thème 2 : Numérique et intelligence collective - Sciences de gestion STMG Première, Éduscol - Ministère de l'Éducation nationale. Consulté le 10 novembre 2026.
- Ressources pédagogiques : Contenus et données massives en STMG, Éduscol - Ministère de l'Éducation nationale. Consulté le 10 novembre 2026.
- Ressources pédagogiques : Systèmes de gestion de bases de données relationnelles (SGBDR), Éduscol. Consulté le 10 novembre 2026.
- Ressources : Requêtes et extraction de données, Éduscol. Consulté le 10 novembre 2026.
Les numéros dans le texte renvoient à ces sources. Une source qui ne dit pas ce qu'on lui fait dire ? Signale-le.