Cours complet – Jointures et modèle relationnel
Introduction
L’un des principaux intérêts des bases de données relationnelles est de pouvoir croiser des informations provenant de plusieurs tables.
Contrairement aux requêtes sur une seule table, les requêtes multi-tables permettent d’exploiter les relations entre entités, par exemple entre des éléments chimiques et leurs grandeurs physiques, ou entre des classes, des professeurs et des cours.
Ce cours présente :
- les jointures SQL
- les opérations ensemblistes
- les notions fondamentales du modèle entités–associations
- le rôle essentiel des clés étrangères
I. Les jointures en SQL
On suppose disposer des trois tables suivantes :
Table tableau (éléments chimiques)
| nom | num_at | symbole | colonne | ligne | bloc |
|---|---|---|---|---|---|
| Hydrogène | 1 | H | 1 | 1 | s |
| Hélium | 2 | He | 18 | 1 | s |
| Lithium | 3 | Li | 1 | 2 | s |
| Béryllium | 4 | Be | 2(IIA) | 2 | s |
Table decouverte
| nom | pays | symbole | date |
|---|---|---|---|
| Henry Cavendish | Grande-Bretagne | H | 1766 |
| Jules Janssen | Grande-Bretagne | He | 1895 |
| Joseph Norman Lockyer | Grande-Bretagne | He | 1895 |
| Johan August Arfwedson | Suède | Li | 1817 |
Table grandeurs
| symbole | rempl | masse_at | temp_fus | temp_ebu |
|---|---|---|---|---|
| H | 1 | 1.00794 | ||
| He | 2 | 4.002602 | −268.93 | |
| Li | 2|1 | 6.94100 | 180.5 | 1342 |
| Be | 2|2 | 9.012182 | 1287 | 2471 |
1. Produit cartésien
Le produit cartésien de deux tables $T_1$ et $T_2$ contient toutes les combinaisons possibles de leurs enregistrements.
En SQL :
SELECT * FROM T1 JOIN T2;
Si T1 contient $ n_1 $ lignes et T2 contient $ n_2 $ lignes, le produit cartésien contient $ n_1 \times n_2$ enregistrements.
⚠️ La majorité de ces lignes n’a aucun sens : on mélange par exemple les données de l’hydrogène avec celles de l’hélium.
C’est pourquoi on utilise des jointures, qui permettent de créer des correspondances pertinentes entre tables.
2. Jointure entre deux tables
Une jointure consiste à relier deux tables grâce à une condition logique.
SELECT attributs
FROM table1 JOIN table2
ON condition;
Exemple fondamental
SELECT *
FROM tableau AS t
JOIN grandeurs AS g
ON t.symbole = g.symbole;
Cette requête associe chaque élément chimique à ses grandeurs physiques grâce à leur symbole commun.
⚠️ Lorsqu’un attribut est présent dans plusieurs tables, il faut préciser la table (ou utiliser un alias).
Sélection après jointure
Une fois la jointure effectuée, on peut utiliser toutes les clauses vues précédemment (WHERE, DISTINCT, ORDER BY, etc.).
SELECT DISTINCT pays
FROM decouverte d
JOIN tableau t
ON d.symbole = t.symbole
WHERE ligne = 2;
→ pays dans lesquels ont été découverts les éléments de la ligne 2.
Jointure sur plusieurs attributs
La condition de jointure peut être composée :
ON d.symbole = g.symbole AND d.symbole = t.symbole
On peut également enchaîner plus de deux tables.
3. Jointure de plusieurs tables
SELECT attributs
FROM table1
JOIN table2
JOIN table3
ON conditions;
Exemple
Déterminer le nom des découvreurs et les symboles des éléments :
- de numéro atomique < 50
- non solides à température nulle
SELECT d.nom, d.symbole
FROM decouverte d
JOIN tableau t
JOIN grandeurs g
ON d.symbole = t.symbole AND d.symbole = g.symbole
WHERE numero_atomique < 50 AND temp_fus < 0;
⚠️ Les préfixes sont indispensables dès qu’une ambiguïté est possible.
4. Auto-jointure
Une autojointure est une jointure d’une table avec elle-même.
Elle est nécessaire lorsque l’on doit comparer des enregistrements d’une même table entre eux.
Exemple
Couples de symboles distincts appartenant à la colonne 3 :
SELECT t1.symbole, t2.symbole
FROM tableau t1
JOIN tableau t2
ON t1.colonne = t2.colonne
WHERE t1.colonne = 3 AND t1.symbole <> t2.symbole;
Exemple plus avancé
Symboles des éléments découverts par un chercheur de la même nationalité que celui ayant découvert le radon :
SELECT DISTINCT d2.symbole
FROM decouverte d1
JOIN decouverte d2
ON d1.pays = d2.pays
WHERE d1.symbole = 'Ra';
5. Opérations ensemblistes
Le résultat d’une requête SQL est une table, que l’on peut combiner avec une autre.
Commandes disponibles
UNION: réunion (sans doublons)INTERSECT: intersectionEXCEPT: différence
⚠️ Les tables doivent avoir le même schéma.
Exemples
SELECT * FROM tableau WHERE ligne = 2
UNION
SELECT * FROM tableau WHERE symbole < 'D';
SELECT * FROM tableau WHERE ligne = 2
EXCEPT
SELECT * FROM tableau WHERE colonne = 1;
Sous-requêtes
Une requête peut être imbriquée dans une autre.
SELECT DISTINCT symbole
FROM decouverte
WHERE pays = (
SELECT pays
FROM decouverte
WHERE symbole = 'Ra'
);
Les sous-requêtes peuvent apparaître :
- après
FROM - dans une condition
WHERE
II. Modèle entités–associations
1. Entités et associations
Une entité est un objet du système à modéliser (personne, lieu, objet…).
Chaque entité est décrite par des attributs et représentée par une table.
Une association représente une relation entre entités.
Exemple pédagogique
Entités :
classe(id_classe, effectif, niveau)professeur(nom, discipline, numero_secu, iban)
Association :
- participation à un cours
2. Cardinalité des associations
- 1 – 1 : chaque entité participe une seule fois
- 1 – * : une entité participe une fois, l’autre plusieurs fois
- * – * : chaque entité peut participer plusieurs fois
Dans le tableau périodique :
tableau↔grandeurs: association 1–1
Dans le cas classes/professeurs :
- association *–*
3. Résolution d’une association * – *
Une association *–* est transformée en deux associations 1–* via une table intermédiaire.
On crée une table cours :
| id_cours | id_prof | classe | salle |
On obtient alors :
- classe 1–* cours
- professeur 1–* cours
4. Clés étrangères
Une clé étrangère est un attribut d’une table qui fait référence à un attribut d’une autre table.
Exemples :
cours.classe→classe.id_classecours.id_prof→professeur.numero_secu
Les clés étrangères garantissent la cohérence des données.
⚠️ Leur définition se fait à la création de la table.
Conclusion
Les requêtes SQL sur plusieurs tables reposent sur :
- une bonne compréhension des jointures
- la maîtrise des relations entre entités
- l’usage rigoureux des clés primaires et étrangères
Elles constituent le cœur de l’exploitation des bases de données relationnelles et sont indispensables pour modéliser des systèmes complexes.
FAQ – Requêtes SQL sur plusieurs tables
Qu’est-ce qu’une requête SQL sur plusieurs tables ?
Une requête SQL sur plusieurs tables permet de croiser des informations provenant de différentes tables d’une base de données relationnelle en utilisant des jointures ou des sous-requêtes.
À quoi sert une jointure en SQL ?
Une jointure permet de relier deux ou plusieurs tables grâce à une condition logique afin de faire correspondre des enregistrements liés, par exemple via une clé commune.
Quelle est la différence entre produit cartésien et jointure ?
Le produit cartésien combine toutes les lignes de deux tables sans condition, ce qui produit beaucoup de résultats inutiles. Une jointure applique directement une condition pour ne garder que les correspondances pertinentes.
Pourquoi faut-il utiliser des alias lors des jointures ?
Les alias permettent de distinguer clairement les tables lorsqu’elles possèdent des attributs portant le même nom et rendent les requêtes SQL plus lisibles.
Peut-on faire une jointure sur plusieurs attributs ?
Oui. Une condition de jointure peut être composée de plusieurs comparaisons reliées par
des opérateurs logiques comme AND ou OR.
Qu’est-ce qu’une autojointure en SQL ?
Une autojointure est une jointure d’une table avec elle-même. Elle permet de comparer des enregistrements d’une même table entre eux, à condition d’utiliser des alias.
À quoi servent UNION, INTERSECT et EXCEPT ?
Ces opérations ensemblistes permettent respectivement de faire la réunion, l’intersection ou la différence entre deux tables ayant le même schéma relationnel.
Qu’est-ce qu’une sous-requête en SQL ?
Une sous-requête est une requête imbriquée dans une autre. Elle permet d’utiliser le résultat d’une requête comme condition ou comme source de données.
Qu’est-ce qu’une clé étrangère ?
Une clé étrangère est un attribut d’une table qui fait référence à un attribut d’une autre table. Elle garantit la cohérence des relations entre les tables.
Pourquoi les associations *-* sont-elles problématiques ?
Les associations de type *-* sont difficiles à exploiter directement en SQL. On les transforme généralement en deux associations 1-* à l’aide d’une table intermédiaire.
Ce cours suffit-il pour maîtriser les jointures SQL aux examens ?
Oui. Ce cours couvre l’ensemble des notions essentielles sur les requêtes SQL multi-tables attendues en CPGE, à l’université et dans les premières années d’école d’ingénieurs.
Commentaires