Aller au contenu

Systèmes d'information de gestion · Terminale STMGBac

Requêtes et jointures : cours de Terminale STMG

Publié le 11 novembre 2026 · Mis à jour le 11 novembre 2026 · Signaler une erreur

L'essentiel

  • Une requête interroge une base : SELECT choisit les colonnes, FROM la table, WHERE filtre les lignes, ORDER BY trie.
  • Une jointure relie deux tables grâce à un champ commun : la clé primaire d'un côté, la clé étrangère de l'autre, comparées dans ON.
  • Sans condition de jointure, on obtient toutes les combinaisons de lignes (produit cartésien) : le résultat est faux et énorme.
  • GROUP BY regroupe les lignes ; SUM, COUNT, AVG calculent un résultat par groupe ; HAVING filtre sur ces groupes.
  • INNER JOIN garde seulement les lignes qui ont une correspondance ; LEFT JOIN garde aussi les lignes de la table de gauche sans correspondance.
  • Le même principe existe dans un logiciel de cartographie (SIG) : la jointure attributaire lie une couche à une table grâce à des champs clés.2

Pourquoi interroger et relier des données ?

Une entreprise garde ses informations dans une base de données : clients, produits, commandes, factures. Ces informations ne sont pas rangées dans un seul grand tableau. Elles sont réparties dans plusieurs tables, chacune consacrée à un sujet précis. Cette organisation évite de recopier cent fois l'adresse d'un client chaque fois qu'il passe commande.

Mais cette répartition pose un problème pratique. Un responsable commercial veut savoir : quels clients de Lyon ont passé commande en mars, et pour quel montant total ? La réponse se trouve dans deux tables à la fois. Il faut donc deux outils :

  • la requête, qui permet de poser une question précise à la base ;
  • la jointure, qui permet de rassembler dans une même réponse des données stockées dans des tables différentes.

Dans ce cours, tu vas apprendre à lire et à écrire des requêtes en langage SQL, à construire une jointure en repérant les bons champs, à calculer des totaux par groupe, et à éviter les erreurs qui coûtent des points au bac. Tu t'appuies sur deux notions déjà vues : le modèle relationnel et les bases du langage SQL.

Tout au long du cours, nous utiliserons la même petite base d'une boutique en ligne. Elle contient deux tables.

Table CLIENT

id_client nom ville
1 Durand Lyon
2 Martin Nantes
3 Bernard Lille
4 Petit Lyon

Table COMMANDE

id_commande date_commande montant id_client
101 2026-03-02 120 1
102 2026-03-05 80 2
103 2026-03-09 45 1
104 2026-03-12 200 4
105 2026-03-15 60 2

Les montants sont en euros. Retiens bien ces deux tables : tous les exemples et les exercices s'y rapportent.

Rappel : tables, clés primaire et étrangère

Observe la commande 103 : son id_client vaut 1. On ne retrouve pas le nom du client dans COMMANDE, seulement son numéro. Pour savoir que la commande 103 appartient à Durand, il faut aller lire la table CLIENT. C'est exactement ce que fera la jointure, mais de façon automatique et pour toutes les lignes en même temps.

La requête de sélection : SELECT, FROM, WHERE, ORDER BY

Calculer avec les agrégats : COUNT, SUM, AVG, GROUP BY

La jointure : relier deux tables par un champ commun

Jusqu'ici, nos requêtes ne touchaient qu'une seule table. Le total par client affiche pourtant un numéro (1, 2, 4), alors que le responsable commercial veut lire un nom (Durand, Martin, Petit). Le nom est dans CLIENT, le montant dans COMMANDE. Pour les mettre côte à côte, il faut joindre les deux tables.

Cette idée dépasse le seul SQL. Dans les logiciels de cartographie (SIG), on parle de jointure attributaire : elle rattache à une couche géographique des données qui viennent d'une table ou d'une autre couche, en s'appuyant sur les données attributaires.2 Un tutoriel du CNRS pose d'ailleurs la question de départ qui compte dans toute jointure : quels sont les deux champs clés qui permettront de relier les deux tables ?2 C'est le premier réflexe à avoir, que tu travailles en SQL ou dans un SIG.

Résultat de la jointure CLIENT et COMMANDE
nomid_commandemontant (€)
Durand101120
Martin10280
Durand10345
Petit104200
Martin10560
Résultat de la jointure CLIENT et COMMANDE · Bernard n'apparaît pas : il n'a aucune commande.

Écrire une jointure en SQL

Écrire une requête avec jointureCinq étapes : lire la question, repérer les tables, trouver les clés, écrire la jointure, filtrer et regrouper.1Lire la questionQuelles colonnes, quel calcul ?2Repérer les tablesOù se trouve chaque information ?3Trouver les clésClé primaire et clé étrangère.4JoindreJOIN … ON avec les champs clés.5Filtrer et grouperWHERE, GROUP BY, HAVING, ORDER BY.
  1. Lire la questionQuelles colonnes, quel calcul ?
  2. Repérer les tablesOù se trouve chaque information ?
  3. Trouver les clésClé primaire et clé étrangère.
  4. JoindreJOIN … ON avec les champs clés.
  5. Filtrer et grouperWHERE, GROUP BY, HAVING, ORDER BY.
Écrire une requête avec jointure

INNER JOIN et LEFT JOIN : que faire des lignes sans correspondance ?

Bernard n'a passé aucune commande. Avec INNER JOIN, il disparaît du résultat : une ligne n'est gardée que si une correspondance existe des deux côtés. Or il arrive qu'on veuille justement repérer les clients sans commande, pour leur envoyer une offre par exemple. Un autre type de jointure répond à ce besoin.

Jointure et cartographie : le même principe dans un SIG

Un système d'information géographique (SIG) stocke des cartes sous forme de couches. Chaque couche possède une table d'attributs : une ligne par territoire (une commune, un département), avec des colonnes qui le décrivent. Les statistiques, elles, arrivent souvent dans un fichier séparé, par exemple un tableau de recensement.

Le tutoriel du CNRS montre deux situations : la jointure d'une couche et d'une table, avec le recensement de la population au Kenya, et la jointure de deux couches, avec les licences sportives et les catégories socio-professionnelles en France.2 Dans les deux cas, on se base sur les données attributaires, et la première chose à faire est de choisir un champ clé commun aux deux ensembles.2

Erreurs fréquentes et méthode complète

Exercices corrigés

Exercice 1 Le total des clients de Lyon

★☆☆Environ 10 min

On reprend les tables CLIENT et COMMANDE du cours.

  1. Écris la requête qui affiche le nom et le montant de chaque commande passée par un client de Lyon.
  2. Calcule le total, en euros, des commandes de ces clients.
Indice 1

Il faut joindre CLIENT et COMMANDE sur id_client, puis filtrer sur la ville.

Indice 2

Les clients de Lyon sont Durand (clé 1) et Petit (clé 4).

Voir la correction pas à pas
  1. On repère les deux tables nécessaires : CLIENT (pour la ville et le nom) et COMMANDE (pour le montant). Le champ clé est id_client.

  2. On écrit la requête : SELECT cl.nom, co.montant FROM COMMANDE co INNER JOIN CLIENT cl ON co.id_client = cl.id_client WHERE cl.ville = 'Lyon';

  3. Le filtre garde les clients Durand et Petit. Durand a deux commandes : 120 € et 45 €. Petit en a une : 200 €.

  4. On additionne : 120+45+200=365120 + 45 + 200 = 365 euros.

Le total des commandes des clients de Lyon est de 365 euros. On l'obtiendrait directement en remplaçant cl.nom, co.montant par SUM(co.montant).

Exercice 2 Produit cartésien ou jointure ?

★★☆Environ 10 min

Un élève écrit la requête suivante :

SELECT cl.nom, co.montant
FROM CLIENT cl, COMMANDE co;

La table CLIENT contient 4 lignes et la table COMMANDE en contient 5.

  1. Combien de lignes cette requête renvoie-t-elle ?
  2. Quelle erreur l'élève a-t-il commise ?
  3. Corrige la requête et indique combien de lignes elle renvoie alors.
Indice 1

Sans condition de liaison, chaque ligne de la première table est associée à chaque ligne de la seconde.

Indice 2

Une jointure correcte renvoie une ligne par commande, car chaque commande a exactement un client.

Voir la correction pas à pas
  1. Sans condition, la base forme toutes les paires possibles : une ligne de CLIENT avec une ligne de COMMANDE. Le nombre de lignes vaut 4×5=204 \times 5 = 20.

  2. L'erreur est l'oubli de la condition de jointure : rien ne dit que cl.id_client doit être égal à co.id_client.

  3. On corrige : SELECT cl.nom, co.montant FROM CLIENT cl INNER JOIN COMMANDE co ON cl.id_client = co.id_client;

  4. Chaque commande a un seul client correspondant, donc le résultat contient une ligne par commande, soit 5 lignes.

La requête fausse renvoie 20 lignes, dont 15 sont absurdes. La requête corrigée en renvoie 5. Quand un résultat est bien plus grand que prévu, vérifie la condition ON.

Exercice 3 Moyenne des grosses commandes et clients sans commande

★★★Environ 15 min

Toujours avec les tables CLIENT et COMMANDE.

  1. Écris une requête qui calcule la moyenne des montants des commandes d'au moins 60 euros.
  2. Calcule cette moyenne.
  3. Écris une requête qui affiche le nom des clients n'ayant passé aucune commande, et donne son résultat.
Indice 1

Utilise AVG(montant) avec un WHERE montant >= 60.

Indice 2

Pour les clients sans commande, pars de CLIENT avec un LEFT JOIN et teste IS NULL sur un champ de COMMANDE.

Voir la correction pas à pas
  1. Requête 1 : SELECT AVG(montant) FROM COMMANDE WHERE montant >= 60;

  2. Les commandes qui passent le filtre sont 101 (120), 102 (80), 104 (200) et 105 (60). La commande 103 (45) est écartée.

  3. On calcule la moyenne : 120+80+200+604=4604=115\dfrac{120 + 80 + 200 + 60}{4} = \dfrac{460}{4} = 115 euros.

  4. Requête 2 : SELECT cl.nom FROM CLIENT cl LEFT JOIN COMMANDE co ON cl.id_client = co.id_client WHERE co.id_commande IS NULL;

  5. Seul le client 3 n'a aucune ligne correspondante dans COMMANDE : le résultat est Bernard.

La moyenne des commandes d'au moins 60 euros est de 115 euros, et le seul client sans commande est Bernard. Le LEFT JOIN suivi de IS NULL est le modèle à retenir pour chercher les éléments sans correspondance.

Quiz

8 questions · correction immédiate · ton score reste sur ton appareil.

  1. Dans la table COMMANDE du cours, quel rôle joue le champ id_client ?

  2. Quelle clause d'une requête SQL sert à écrire la condition qui relie deux tables dans un INNER JOIN ?

  3. On exécute SELECT cl.nom, co.montant FROM CLIENT cl, COMMANDE co; sans aucune condition de liaison, avec 4 clients et 5 commandes. Combien de lignes obtient-on ?

  4. Quel type de jointure faut-il utiliser pour obtenir tous les clients, y compris ceux qui n'ont passé aucune commande ?

  5. Quelles affirmations sur WHERE et HAVING sont exactes ?

    Plusieurs réponses possibles.

  6. Quel est le total, en euros, des commandes de Martin (client 2) ?

  7. Dans une base de gestion, une jointure correcte relie en général une clé primaire et la clé étrangère qui la reprend.

  8. Avec LEFT JOIN, comment teste-t-on qu'un champ de la table de droite est vide ?

Les questions qu'on se pose

Quelle est la différence entre une requête et une jointure ?

Une requête est la question posée à la base (afficher, filtrer, calculer). Une jointure est un moyen, à l'intérieur d'une requête, de rassembler les données de deux tables. Une requête peut s'écrire sans jointure (une seule table), mais une jointure se trouve toujours dans une requête.

Comment savoir quels champs utiliser pour joindre deux tables ?

Cherche la clé étrangère : c'est un champ d'une table qui reprend la clé primaire d'une autre. Dans notre base, id_client de COMMANDE renvoie à id_client de CLIENT. Le schéma relationnel donné dans un sujet indique d'ordinaire ces liens. Dans un SIG, on se pose la même question : quels champs clés relient la couche et la table ?2

Pourquoi mon résultat contient-il beaucoup trop de lignes ?

Le plus souvent, la condition de jointure manque ou porte sur le mauvais champ. La base fait alors toutes les combinaisons possibles : c'est le produit cartésien. Avec 4 clients et 5 commandes, on obtient 20 lignes au lieu de 5. Vérifie ta clause ON.

Quand choisir INNER JOIN, quand choisir LEFT JOIN ?

Choisis INNER JOIN quand tu ne veux que les éléments qui ont une correspondance (les clients qui ont commandé). Choisis LEFT JOIN quand tu veux garder tous les éléments de la table de gauche, même sans correspondance (tous les clients, avec ou sans commande), par exemple pour trouver ceux qui n'ont rien acheté.

Que dois-je savoir écrire de mémoire pour le bac ?

Entraîne-toi à lire et à écrire une requête complète : SELECT, FROM, JOIN … ON, WHERE, GROUP BY, ORDER BY. Sache aussi expliquer pourquoi un résultat est faux (condition manquante, mauvais champ clé). Ne retiens aucune règle de barème précise depuis ce cours : consulte les consignes officielles de ta session.

Sources

  1. 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.
  2. 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.

Signaler une erreur sur cette page

Je suis en…

Primaire

  • CP Bientôt
  • CE1 Bientôt
  • CE2
  • CM1
  • CM2 Bientôt

Collège

Lycée

Supérieur

  • BTS Bientôt
  • BUT Bientôt
  • Licence Bientôt
  • Prépas Bientôt

Sur cette page