Prepa Help
Prepa Help › Cours › Informatique, 2e année

Requêtes SQL sur plusieurs tables : jointures, agrégation, groupement et sous-requêtes, cours, méthodes et exercices corrigés pour les ECS, ECT et ECG

Requêtes sur plusieurs tables : produit cartésien et jointures, fonctions d'agrégation, groupement (GROUP BY, HAVING), requêtes imbriquées et opérations ensemblistes, exécutées sous SQLite et depuis Python, avec des cas tirés des sujets du CNAEM, de l'ISCAE, de la BCE et d'ECRICOME.

Les nombres sont ceux du chapitre complet ; chaque filière voit la partie qui correspond à son programme.

Une jointure rapproche deux tables reliées par une clé : elle garde, parmi toutes les associations de lignes (le produit cartésien), celles où la clé étrangère est égale à la clé primaire qu'elle désigne. Elle s'écrit FROM commande INNER JOIN client ON commande.num_client = client.num_client, ou, de façon équivalente, FROM commande, client WHERE commande.num_client = client.num_client ; on ajoute une ligne INNER JOIN ... ON par table et on préfixe chaque colonne par sa table (client.nom). Les fonctions d'agrégation COUNT, SUM, AVG, MIN et MAX résument des lignes en une valeur : sans GROUP BY, elles rendent une seule ligne, et elles ignorent les valeurs NULL, sauf COUNT(*). GROUP BY calcule un agrégat pour chaque groupe (on groupe par la clé, jamais par un nom) ; HAVING filtre les groupes, alors que WHERE filtre les lignes avant le groupement. Une sous-requête est une requête entre parenthèses dans une autre : elle rend une valeur (comparée par =, <, >), une colonne (testée par IN) ou une table (lue dans FROM) ; « aucun », « jamais » s'écrivent avec NOT EXISTS. Ce chapitre d'informatique de deuxième année couvre le SQL sur plusieurs tables de l'ECS2 et de l'ECT2 au Maroc (programme fondé sur SQLite, avec GROUP BY, HAVING, les sous-requêtes, et en ECT2 NATURAL JOIN, UNION, INTERSECT, EXCEPT) et de l'ECG (mathématiques appliquées) et de l'ECT en France, où seule la jointure INNER JOIN est exigible et où les agrégats, posés aux concours, sont rappelés en annexe. Il prépare aux questions SQL du CNAEM (épreuve « Gestion, management et informatique » de la filière ECT) et des sujets de mathématiques de la BCE et d'ECRICOME. La page propose un cours avec des schémas, des méthodes avec la requête type à écrire sur la copie, des exercices corrigés dont chaque requête a été exécutée sous SQLite, et des sujets réels du CNAEM, d'ECRICOME, de la BCE et du CNC corrigés pas à pas.

Ce que tu sauras faire

Une base de données sérieuse range ses informations dans plusieurs tables reliées par des clés. Ce chapitre apprend à les interroger ensemble. À la fin, tu dois savoir :

L'essentiel : La jointure Extrait gratuit

Un extrait de la fiche « L'essentiel » du chapitre. Les démonstrations sont dans le cours détaillé.

SELECT commande.num_cde, client.nom
FROM commande
INNER JOIN client ON commande.num_client = client.num_client
WHERE commande.date_cde >= '2025-03-01';
  • Même résultat : FROM commande, client WHERE commande.num_client = client.num_client ; JOIN seul = INNER JOIN.
  • Une ligne INNER JOIN ... ON par table ajoutée, en suivant le chemin des clés.
  • Colonne présente dans deux tables : la préfixer (client.nom), sinon ambiguous column name.
  • Clé composée : ON a.x = b.x AND a.y = b.y.
  • Une ligne sans correspondant (ou à NULL) disparaît de la jointure.

Une méthode du chapitre Extrait gratuit

Un exercice corrigé Extrait gratuit

Dans le chapitre complet

Le cours détaillé, toute la fiche « L'essentiel », 22 méthodes, 26 pièges corrigés, la carte mentale, 55 exercices corrigés, 10 problèmes de concours, les fiches à mémoriser et l'assistant qui répond à tes questions. Ce chapitre est offert : il s’ouvre en entier avec un compte d’essai gratuit.

Ouvrir l'essai gratuit

Plan du cours

Les méthodes du chapitre

Chaque méthode est une fiche : quand l'utiliser, le rappel de cours, les étapes, la rédaction attendue sur la copie, un exemple traité, les erreurs à éviter.

  1. Lire un schéma et tracer le chemin des clés
  2. Écrire une jointure avec INNER JOIN ... ON
  3. Passer d'une écriture à l'autre et reconnaître un produit cartésien oublié
  4. Choisir et écrire un agrégat
  5. Calculer un ratio ou une moyenne à partir d'agrégats
  6. Éviter les doublons et les sommes gonflées d'une jointure
  7. Traduire une phrase en requête sur plusieurs tables
  8. Lire une requête et dire ce qu'elle affiche
  9. Vérifier une requête sur plusieurs tables
  10. Traiter une partie SQL de concours sur plusieurs tables
  11. Écrire un groupement avec GROUP BY
  12. Choisir entre WHERE et HAVING
  13. Écrire une sous-requête
  14. Trouver le ou les maximums, ex aequo compris
  15. Exprimer une négation : « aucun », « jamais », « pour tout »
  16. Écrire une autojointure ou joindre deux fois la même table
  17. Lire et écrire une sous-requête corrélée, ou une sous-requête dans SELECT
  18. Combiner des résultats avec UNION, INTERSECT, EXCEPT
  19. Employer NATURAL JOIN sans se tromper
  20. Grouper par mois ou par année avec strftime
  21. Se servir de l'annexe de syntaxe d'un sujet
  22. Exécuter une jointure à la main et compter ses lignes

Les exercices corrigés

Chaque exercice a ses indications, sa correction rédigée et ce qu'il faut en retenir.

Application directe (18)

Entraînement (28)

Approfondissement (9)

Les problèmes de concours

Des extraits de sujets réels, corrigés en entier, avec la durée conseillée et les méthodes mobilisées.

Questions fréquentes

Comment faire une jointure entre deux tables en SQL ?

On relie la clé étrangère d'une table à la clé primaire de l'autre : SELECT commande.num_cde, client.nom FROM commande INNER JOIN client ON commande.num_client = client.num_client;. JOIN seul est un synonyme d'INNER JOIN, et la même jointure s'écrit aussi FROM commande, client WHERE commande.num_client = client.num_client. Pour une troisième table, on ajoute une ligne INNER JOIN ... ON.

Que signifie ambiguous column name en SQL ?

Une colonne de la requête porte le même nom dans deux tables jointes, et SQLite ne sait pas laquelle afficher. On la préfixe par le nom de sa table : client.num_client ou commande.num_client.

Quelle différence entre COUNT(*) et COUNT(colonne) ?

COUNT(*) compte les lignes ; COUNT(colonne) compte les valeurs non NULL de la colonne ; COUNT(DISTINCT colonne) compte ses valeurs différentes. Sur six clients dont un sans ville, COUNT(*) vaut 6 et COUNT(ville) vaut 5.

Quelle différence entre WHERE et HAVING ?

WHERE filtre les lignes avant le groupement et ne contient jamais de fonction d'agrégation (WHERE SUM(x) > 10 est refusé). HAVING filtre les groupes après GROUP BY, sur un agrégat : GROUP BY ref_produit HAVING SUM(quantite) >= 20. Ordre d'écriture : SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY.

Pourquoi une somme est-elle trop grande après une jointure ?

Si une table de la jointure a plusieurs lignes pour une même ligne qu'on somme, cette ligne est répétée avant le SUM : la somme est doublée, sans message. On calcule la somme sur la seule table qui porte les quantités, ou l'on groupe d'abord dans une sous-requête, puis on joint.

Comment trouver les clients qui n'ont jamais commandé en SQL ?

Une jointure interne ne peut pas les donner : ils en sont absents. On retire l'ensemble de ceux qui ont commandé : WHERE NOT EXISTS (SELECT * FROM commande WHERE commande.num_client = client.num_client). Avec NOT IN, un seul NULL dans la sous-requête fait rendre zéro ligne.

Le SQL sur plusieurs tables est-il au programme des ECS, ECT et ECG ?

Au Maroc, oui : jointure, agrégats, GROUP BY, HAVING et sous-requêtes sont au programme de la matière Informatique de l'ECS2 et de l'ECT2, avec SQLite ; l'ECT2 a en plus NATURAL JOIN et les opérateurs ensemblistes. En France, seule la jointure INNER JOIN ... ON avec des égalités est exigible en ECT et en ECG mathématiques appliquées ; les agrégats sont non exigibles, mais les sujets ECRICOME et BCE les posent en rappelant leur syntaxe en annexe.

Comment y accéder

Ce chapitre fait partie des chapitres offerts : il s'ouvre en entier avec un compte d'essai gratuit. Créer un compte d'essai ou se connecter. Pour l'accès complet, les tarifs ou une question, écris-nous sur WhatsApp.

Toute ta prépa au même endroit

Pour chaque chapitre : le cours, l'essentiel, les méthodes, les pièges, les exercices corrigés, les problèmes de concours, et un assistant qui répond à tes questions. Programmes du Maroc et de France. Avec la plateforme vidéo YOUNESS SCHOOL offerte, dès 600 DH (60 $) par mois, sans engagement.

Prépas scientifiques : voir l'offrePrépas ECS et ECT : voir l'offreTu hésites encore ? Essaie gratuitement Prepa Help.

← Requêtes SQL sur une table : création, sélection, tri et mise à jour