Systèmes d'information de gestion · Terminale STMGBac
Requêtes et jointures : exercices corrigés de Terminale STMG
Publié le 11 novembre 2026 · Mis à jour le 11 novembre 2026 · Signaler une erreur
L'essentiel
- Une jointure relie deux tables (ou deux couches d'un SIG) grâce à un champ commun : le champ clé.2
- Avant d'écrire une requête, repère les tables utiles, le champ commun, puis la condition de sélection.
- Une jointure interne ne garde que les lignes qui ont une correspondance ; une jointure externe garde aussi les lignes sans correspondance, avec des valeurs vides.
- Sans condition de jointure, chaque ligne d'une table est associée à chaque ligne de l'autre : le résultat explose.
- Vérifie toujours le nombre de lignes obtenu : c'est le meilleur contrôle d'une jointure.
Comment utiliser ces exercices
Cette page te propose des exercices pour t'entraîner aux requêtes et aux jointures, deux outils centraux pour exploiter des données réparties dans plusieurs tables. Tu connais déjà le modèle relationnel et les bases du langage SQL : ici, tu les mets au travail sur des situations de gestion (clients, commandes, produits).
Les exercices sont classés par difficulté croissante. Les premiers demandent de repérer un champ commun ou de filtrer une table. Les derniers t'amènent à prévoir le nombre de lignes d'un résultat et à repérer une jointure mal écrite.
Rappels utiles avant de commencer
Les exercices utilisent deux petites bases de gestion inventées pour l'occasion. Tu peux les recopier sur ta feuille pour travailler plus vite.
Table CLIENT (clé : id_client)
| id_client | nom | ville |
|---|---|---|
| 1 | Awa | Lyon |
| 2 | Bruno | Nantes |
| 3 | Chloé | Lyon |
| 4 | David | Lille |
Table COMMANDE (clé : num_cmd ; id_client renvoie à CLIENT)
| num_cmd | id_client | montant (€) |
|---|---|---|
| 101 | 1 | 120 |
| 102 | 1 | 80 |
| 103 | 3 | 150 |
| 104 | 2 | 60 |
| 105 | 3 | 40 |
Les exercices
Exercice 1 Repérer le champ clé
Une entreprise gère deux tables :
PRODUIT(ref, designation, prix)LIGNE(num_cmd, ref, quantite)
On veut afficher, pour chaque ligne de commande, la désignation du produit commandé.
- Quel champ permet de relier les deux tables ?
- Dans quelle table est-il la clé primaire ? Dans laquelle est-il une clé étrangère ?
- Écris la condition de jointure.
Indice 1
Cherche le nom de champ qui apparaît dans les deux tables.
Indice 2
La clé primaire identifie une ligne de façon unique dans sa table.
Voir la correction pas à pas
Compare les champs des deux tables : seul
reffigure dans PRODUIT et dans LIGNE. C'est le champ commun, donc le champ clé de la jointure.Dans PRODUIT, chaque référence désigne un seul produit :
refy est la clé primaire.Dans LIGNE, une même référence peut revenir sur plusieurs lignes de commande :
refy est une clé étrangère.Écris la condition :
PRODUIT.ref = LIGNE.ref, placée aprèsONdans la jointure.
Le champ clé se repère par le nom commun et par le rôle : identifiant unique d'un côté, rappel de cet identifiant de l'autre.
Exercice 2 Filtrer une table
Une table COMMANDE contient six commandes dont les montants, en euros, sont : 80, 120, 150, 100, 200 et 95.
On exécute :
SELECT * FROM COMMANDE WHERE montant > 100;
Combien de lignes cette requête renvoie-t-elle ?
Indice 1
L'opérateur > signifie strictement supérieur.
Indice 2
Regarde bien la commande de 100 euros.
Voir la correction pas à pas
Lis la condition : on garde les commandes dont le montant est strictement supérieur à 100 €.
Teste chaque montant : 80 non, 120 oui, 150 oui, 100 non (il est égal à 100, pas supérieur), 200 oui, 95 non.
Compte les lignes retenues : 120, 150 et 200, soit 3 lignes.
La requête renvoie 3 lignes. Le piège était le montant de 100 € : avec >=, il aurait été conservé.
Exercice 3 Compter les lignes d'une jointure interne
En utilisant les tables CLIENT et COMMANDE du rappel, on exécute :
SELECT CLIENT.nom, COMMANDE.montant
FROM CLIENT
INNER JOIN COMMANDE
ON CLIENT.id_client = COMMANDE.id_client;
- Combien de lignes le résultat contient-il ?
- Quel client n'apparaît pas ? Pourquoi ?
Indice 1
Une ligne du résultat correspond à une commande qui retrouve son client.
Indice 2
Regarde quel id_client n'est jamais utilisé dans COMMANDE.
Voir la correction pas à pas
Liste les commandes et leur client : 101 (client 1), 102 (client 1), 103 (client 3), 104 (client 2), 105 (client 3).
Chaque commande trouve un client correspondant dans CLIENT : elle donne donc une ligne dans le résultat.
Compte : 5 commandes, donc 5 lignes.
Le client 4, David, n'a aucune commande : aucune ligne de COMMANDE ne porte
id_client = 4. Une jointure interne l'écarte.
Le résultat contient 5 lignes, et David n'y figure pas puisqu'il n'a passé aucune commande.
Exercice 4 Chiffre d'affaires d'une ville
Avec les mêmes tables, on veut connaître le total des montants des commandes passées par les clients habitant Lyon.
- Écris la requête SQL.
- Calcule le résultat à la main, en euros.
Indice 1
Il faut une jointure, puis un filtre sur la ville, puis une somme.
Indice 2
Les clients lyonnais sont ceux dont la ville vaut 'Lyon'.
Voir la correction pas à pas
Écris la jointure sur le champ commun :
FROM CLIENT INNER JOIN COMMANDE ON CLIENT.id_client = COMMANDE.id_client.Ajoute le filtre :
WHERE CLIENT.ville = 'Lyon'.Ajoute le calcul dans le
SELECT:SELECT SUM(COMMANDE.montant).Identifie les clients de Lyon : Awa (1) et Chloé (3).
Additionne leurs commandes : Awa 120 + 80 ; Chloé 150 + 40. Total : 120 + 80 + 150 + 40 = 390 €.
La requête complète est SELECT SUM(COMMANDE.montant) FROM CLIENT INNER JOIN COMMANDE ON CLIENT.id_client = COMMANDE.id_client WHERE CLIENT.ville = 'Lyon'; et elle renvoie 390 €.
Exercice 5 Jointure externe et valeurs vides
On remplace la jointure interne de l'exercice 3 par une jointure externe à gauche :
SELECT CLIENT.nom, COMMANDE.montant
FROM CLIENT
LEFT JOIN COMMANDE
ON CLIENT.id_client = COMMANDE.id_client;
- Combien de lignes le résultat contient-il ?
- Que contient la colonne
montantpour David ? - Quel intérêt présente cette requête pour un service commercial ?
Indice 1
Pars du résultat de la jointure interne, puis ajoute ce que LEFT JOIN conserve en plus.
Indice 2
Un client sans commande n'a rien à afficher dans montant.
Voir la correction pas à pas
Reprends le résultat de la jointure interne : 5 lignes, une par commande.
Repère les lignes de CLIENT sans correspondance : seul David (client 4) n'a aucune commande.
Ajoute une ligne pour David, conservée par
LEFT JOIN: 5 + 1 = 6 lignes.Sur cette ligne, la colonne
montantvautNULL: la valeur est vide, ce n'est pas 0 €.Intérêt : repérer les clients inscrits qui n'ont encore rien acheté, par exemple pour leur envoyer une offre.
Le résultat contient 6 lignes, et David y figure avec un montant NULL. La jointure externe sert à ne perdre aucun client de la table de gauche.
Exercice 6 Repérer une jointure mal écrite
Un élève écrit :
SELECT CLIENT.nom, COMMANDE.montant
FROM CLIENT, COMMANDE;
Il oublie toute condition entre les deux tables.
- Combien de lignes obtient-il avec les tables du rappel ?
- Pourquoi ce résultat est-il inexploitable ?
- Corrige la requête.
Indice 1
Sans condition, chaque ligne de la première table est associée à toutes celles de la seconde.
Indice 2
Compte les lignes de chaque table : 4 clients et 5 commandes.
Voir la correction pas à pas
Compte les lignes de chaque table : CLIENT en a 4 et COMMANDE en a 5.
Sans condition, chaque client est associé à chaque commande. On obtient 4 × 5 = 20 lignes : c'est un produit cartésien.
Ce résultat est inexploitable : Awa apparaîtrait avec la commande de Bruno, et ainsi de suite. La plupart des associations sont fausses.
Corrige en ajoutant la condition de jointure :
WHERE CLIENT.id_client = COMMANDE.id_client, ou mieuxINNER JOIN ... ON CLIENT.id_client = COMMANDE.id_client.Contrôle : la requête corrigée renvoie 5 lignes, soit une par commande.
L'élève obtient 20 lignes au lieu de 5. Un nombre de lignes très supérieur à celui attendu signale presque toujours une condition de jointure oubliée.
Les questions qu'on se pose
Comment savoir quel champ utiliser pour faire une jointure ?
Cherche le champ qui apparaît dans les deux tables avec des valeurs de même nature, en général une clé primaire d'un côté et une clé étrangère de l'autre. Les deux champs n'ont pas forcément le même nom, mais ils doivent contenir les mêmes identifiants. Avant toute jointure, il faut donc se demander quels sont les deux champs clés.2
Quelle différence entre une jointure interne et une jointure externe ?
La jointure interne ne garde que les lignes qui ont une correspondance dans les deux tables. La jointure externe à gauche garde toutes les lignes de la table de gauche, et remplit par NULL les champs de la table de droite quand il n'y a pas de correspondance. Dans l'exercice sur les clients, la jointure interne donne 5 lignes et la jointure externe en donne 6.
Les jointures existent-elles ailleurs que dans les bases de données de gestion ?
Oui. Les logiciels de cartographie (SIG) utilisent aussi des jointures attributaires : on relie une couche à des données d'un tableau ou d'une autre couche, à partir des valeurs des attributs.2 La logique reste la même : un champ commun, des correspondances ligne à ligne.
Sources
- Ressources Éduscol - Données massives et systèmes d'information de gestion (Terminale STMG), Éduscol - Ministère de l'Éducation nationale. Consulté le 11 novembre 2026.
- Tutoriel - Jointures de données avec QGIS et SQL, CNRS Passages. Consulté le 11 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.