Un cap pour ce chapitre
Ce que vous saurez faire
- Construire une jointure interne entre deux relations.
- Identifier les clés utilisées dans
ON. - Expliquer les répétitions et les erreurs de rapprochement.
Les bases utiles pour commencer
Deux relations, une question commune
Notre relation Club(id_club, nom, salle) contient trois clubs : 1 Robotique en B12, 2 Astronomie en C04 et 3 Photo en B12. La relation Membre indique pour chaque personne le club auquel elle appartient. La question « dans quelle salle chaque personne se rend-elle ? » utilise donc deux relations.
id_membre | prenom | id_club |
|---|---|---|
| 101 | Lina | 1 |
| 102 | Noé | 2 |
| 103 | Sara | 1 |
| 104 | Lina | 3 |
| 105 | Adam | 2 |
La salle n’est pas recopiée dans Membre. Elle sera retrouvée via la clé étrangère id_club, ce qui permet au club de changer de salle sans modifier les données de chaque personne.
La condition sélectionne les bonnes paires
Pour raisonner, imaginez toutes les paires formées d’un membre et d’un club. La jointure interne conserve celles où Membre.id_club = Club.id_club. Lina 101, dont id_club vaut 1, est ainsi rapprochée du club Robotique. La Lina 104 est rapprochée de Photo grâce à son identifiant de club différent.
Il ne faut pas relier id_membre à id_club sous prétexte que les deux sont des identifiants. Ils représentent des entités différentes. Le schéma et la référence indiquent quels attributs doivent être comparés. Les noms proches ou les valeurs accidentellement égales ne constituent pas une justification.
Avec cinq membres et trois clubs, le raisonnement par paires commence par quinze possibilités. La condition correcte en conserve cinq parce que chaque membre référence exactement un club existant et que la clé du club est unique. Cette explication est un outil logique : elle n’affirme pas que le SGBD matérialise nécessairement toutes les paires en mémoire.
Écrire une requête lisible
Des alias courts permettent de préciser la relation de chaque attribut. Dans la requête suivante, m désigne Membre et c désigne Club. ON décrit le rapprochement ; SELECT choisit les informations rendues ; ORDER BY garantit leur ordre. On peut ensuite ajouter WHERE pour limiter le résultat à un club ou un niveau.
SELECT m.prenom, c.nom, c.salle
FROM Membre AS m
JOIN Club AS c ON m.id_club = c.id_club
ORDER BY m.id_membre;La requête renvoie ici cinq lignes, une par membre, car chaque référence vise un club unique existant. Cette quantité dépend des contraintes ; elle n’est pas une propriété générale de toutes les jointures.
Interpréter répétitions et absences
Robotique apparaît sur les lignes de Lina 101 et Sara 103. Cette répétition est normale : deux personnes fréquentent le même club. DISTINCT pourrait supprimer certaines lignes identiques projetées, mais ne répare pas une condition de jointure incorrecte. Une égalité trop large peut produire des associations sans rapport avec les faits.
Une jointure interne ne conserve que les paires satisfaisant ON. Si une référence ne trouve pas de destination, la ligne concernée disparaît du résultat de cette jointure. Dans notre base cohérente, les contraintes empêchent ce cas. D’autres formes de jointures existent, mais elles ne sont pas nécessaires pour maîtriser le mécanisme étudié ici.
Une répétition de salle est encore moins une preuve de doublon que la répétition du nom de club : Robotique et Photo utilisent tous deux B12 dans notre jeu. Joindre par la salle relierait des faits différents sans la référence prévue. Les attributs qui ont parfois la même valeur ne constituent pas automatiquement une clé pertinente pour la jointure.
Exemple suivi : retrouver les membres en salle B12
On commence par la jointure m.id_club = c.id_club, puis on filtre c.salle = 'B12'. Lina 101 rejoint Robotique, Sara 103 rejoint Robotique et Lina 104 rejoint Photo. Ces trois membres fréquentent une salle B12 d’après les clubs annoncés. Noé et Adam rejoignent Astronomie en C04 et ne passent pas le filtre.
Une requête possible est SELECT m.id_membre, m.prenom, c.nom FROM Membre AS m JOIN Club AS c ON m.id_club = c.id_club WHERE c.salle = 'B12' ORDER BY m.id_membre;. La condition ON identifie les associations, WHERE retient les associations utiles, SELECT choisit les informations visibles. Séparer ces rôles aide à éviter une condition de jointure construite à partir de la réponse attendue.
Diagnostiquer une condition trop large
Avec m.id_club >= c.id_club, les membres du club 1 rejoignent seulement le club 1, ceux du club 2 rejoignent les clubs 1 et 2, et la membre du club 3 rejoint les trois clubs. On obtient 1+2+1+3+2=9 paires, dont cinq correspondent aux véritables références et quatre sont artificielles.
Ajouter DISTINCT ne retrouve pas automatiquement les bonnes associations : une fausse paire peut rester unique dans la projection. Le diagnostic doit porter sur la relation sémantique entre les colonnes. Une jointure interne peut aussi produire zéro ligne lorsque la condition compare des identifiants sans rapport. Ce résultat vide peut être syntaxiquement correct. Vérifiez donc la clé étrangère du schéma puis une ou deux associations précises avant de généraliser à tout le tableau.
À vous de faire varier les choses
Regardez les paires que votre condition crée
Changez la condition de jointure. Comparez les liens entre membres et clubs aux associations réellement enregistrées.
Lire le résultat de l’expérience initiale
5 paire(s) retenue(s).
Chaque membre rejoint le club réellement référencé. Le filtre de salle conserve ensuite les paires situées dans la salle choisie. Il ne répare pas une condition ON incorrecte.
| Membre | Prénom | Club | Salle |
|---|---|---|---|
| 101 | Lina | Robotique | B12 |
| 102 | Noé | Astronomie | C04 |
| 103 | Sara | Robotique | B12 |
| 104 | Lina | Photo | B12 |
| 105 | Adam | Astronomie | C04 |
La condition ON définit exactement quelles associations apparaissent ; leur pertinence dépend de votre modèle.
De la compréhension à l’autonomie
À vous de résoudre
Cherchez d’abord par vous-même. Vérifiez les résultats demandés, utilisez les indices si nécessaire, puis comparez votre méthode à la correction.
Retrouver la salle de Noé
Avec les relations du cours, indiquez le club et la salle associés à Noé 102. Quelles deux valeurs sont comparées ?
Indice 1
Sa ligne contient id_club = 2.
Indice 2
Cherchez le club dont la clé vaut 2.
Comprendre la correction
Noé est relié à Astronomie en C04. On compare Membre.id_club, qui vaut 2, à Club.id_club, qui vaut également 2. Son identifiant membre 102 sert à l’identifier, mais n’est pas la valeur utilisée pour trouver son club.
Deux personnes, un club
Pourquoi Robotique apparaît-elle deux fois lorsque l’on sélectionne prenom et nom du club sur toute la base ?
Indice 1
Deux membres référencent le club 1.
Indice 2
La requête décrit des associations, pas une simple liste de clubs.
Comprendre la correction
Lina 101 et Sara 103 appartiennent toutes deux à Robotique. Les deux lignes expriment deux associations distinctes. Il ne s’agit pas automatiquement d’un doublon erroné ; le nombre de lignes correspond ici au nombre de membres associés à chaque club.
Des identifiants de mauvaise nature
Un élève écrit ON m.id_membre = c.id_club. Quel résultat obtient-il avec les données fournies et pourquoi la condition est-elle mauvaise ?
Indice 1
Les identifiants membres vont de 101 à 105.
Indice 2
Les identifiants clubs vont de 1 à 3.
Comprendre la correction
Aucune paire ne satisfait l’égalité, donc le résultat est vide. La condition compare l’identité d’une personne à celle d’un club au lieu d’utiliser la référence portée par le membre. Il faut écrire m.id_club = c.id_club.
Une condition trop large
On remplace l’égalité par m.id_club >= c.id_club. À quels clubs la membre 104, inscrite au club 3, serait-elle reliée ?
Indice 1
Comparez 3 aux trois identifiants de Club.
Indice 2
Une condition vraie ne représente pas forcément le lien voulu.
Comprendre la correction
Elle serait reliée aux clubs 1, 2 et 3, puisque 3 est supérieur ou égal aux trois identifiants. Deux associations seraient fausses par rapport à son inscription. Le programme exécuterait correctement la condition écrite, mais cette condition modéliserait mal le besoin.
Une salle partagée par deux clubs
Avec les données du cours, donnez les identifiants des membres associés à une salle B12 par jointure correcte. Écrivez le filtre sur la relation Club et expliquez pourquoi les deux Lina sont conservées.
Indice 1
Robotique et Photo utilisent B12.
Indice 2
L’identifiant de membre distingue les homonymes.
Comprendre la correction
Les identifiants sont 101,103,104. Après JOIN Club AS c ON m.id_club=c.id_club, on ajoute WHERE c.salle='B12'. Lina 101 et Lina 104 représentent deux personnes de clubs différents ; leurs associations sont toutes deux légitimes.
Compter les associations erronées
Avec la condition m.id_club >= c.id_club, comptez les paires par membre dans l’ordre 101 à 105. Donnez le total et le nombre de paires réellement conformes aux références. Pourquoi DISTINCT ne constitue-t-il pas une réparation ?
Indice 1
Un membre du club 2 satisfait deux inégalités.
Indice 2
Chaque membre conserve une paire exacte mais peut en gagner de fausses.
Comprendre la correction
Les comptes sont 1,2,1,3,2 : neuf paires. Cinq sont conformes, donc quatre sont erronées. DISTINCT élimine seulement des lignes projetées identiques et ne connaît pas les inscriptions réelles. Il faut réparer ON avec l’égalité entre référence et clé.
Une jointure interne sans correspondance
Dans une copie fictive sans contrainte de référence, on ajoute le membre (106,Malo,9), mais aucun club 9. Avec une jointure interne correcte, combien de lignes obtient-on désormais ? Expliquez pourquoi le nouveau membre est absent du résultat et quelle contrainte aurait empêché la situation.
Indice 1
La jointure retient seulement les paires satisfaisant ON.
Indice 2
Le membre supplémentaire ne crée pas automatiquement un club.
Comprendre la correction
La jointure renvoie toujours cinq lignes : aucune paire ne correspond au club 9. La ligne Malo disparaît du résultat, mais reste dans Membre de cette copie incohérente. Une clé étrangère obligatoire vérifiée aurait refusé cette insertion. Une absence dans une jointure ne prouve donc pas une absence de la relation source.
Les erreurs qui méritent un détour
- Relier deux colonnes uniquement parce qu’elles contiennent des nombres.
- Le sens des clés et la référence du schéma déterminent l’égalité pertinente.
- Supprimer les répétitions avant de comprendre leur origine.
- Plusieurs lignes peuvent correspondre à plusieurs associations légitimes. Examinez les paires produites.
La fiche à garder
L’essentiel à retenir
- Une jointure interne sélectionne des paires selon
ON. - La clé étrangère se rapproche de la clé référencée.
- La quantité de lignes dépend des correspondances et des contraintes.
Cette notion au bac
Retrouvez ces idées dans un sujet complet, avec des indices, une correction expliquée et des ateliers.
- Bac 2026 · Métropole · Jour 1 : Plateforme de débats : arbres d’arguments et base relationnelle
- Bac 2026 · Métropole · Jour 2 : Covoiturage : requêtes SQL, files et point de rendez-vous
- Bac 2026 · Centres étrangers groupe 1 · Jour 1 : Démineur : voisinage, propagation et scores en ligne
- Bac 2026 · Centres étrangers groupe 1 · Jour 2 : VintagePixel : collection relationnelle et choix des routes
Le prochain pas
Retrouver le catalogue de Terminale
Ce chapitre s’appuie sur le programme officiel de Terminale (PDF, nouvel onglet). Les explications et exercices sont proposés pour l’apprentissage.
