Les jointures multiples¶
Les jointures permettent de relier plusieurs tables entre elles pour obtenir une vue cohérente des données. Quand on joint deux, trois, ou plus de tables, Oracle exécute la requête en combinant les lignes selon les conditions de jointure, dans l'ordre d'écriture.
L’idée clé :
👉 Chaque jointure réduit ou enrichit le jeu de résultats en fonction de la relation entre les tables.
Schéma¶
Voici un schéma de base utilisé dans les explications plus bas :

Une première jointure¶
Supposons la requête suivante :
SELECT clients.nom, commandes.id_commande, commandes.montant
FROM clients
INNER JOIN commandes
ON clients.id_client = commandes.id_client;
Ce qui se passe :
- Extrait la table CLIENTS.
- Parcourt chaque ligne de CLIENTS.
- Cherche dans COMMANDES les lignes où id_client correspond.
- Produit une ligne de résultat pour chaque correspondance.
Donc, si on a les lignes initiales suivantes :
CLIENTS
| ID_CLIENT | NOM |
|---|---|
| 1 | Martin |
| 2 | Dubois |
COMMANDES
| ID_COMMANDE | ID_CLIENT | MONTANT |
|---|---|---|
| 101 | 1 | 250 |
| 102 | 1 | 90 |
| 103 | 2 | 120 |
On obtient temporairement en mémoire le résultat :
| ID_CLIENT | NOM | ID_COMMANDE | ID_CLIENT | MONTANT |
|---|---|---|---|---|
| 1 | Martin | 101 | 1 | 250 |
| 1 | Martin | 102 | 1 | 90 |
| 2 | Dubois | 103 | 2 | 120 |
Pour finalement extraire les colonnes qui nous intéresse dans le SELECT.
Deux autres jointures¶
Lorsqu'on ajoute une deuxième jointure, alors Oracle :
- Prend le résultat précédent.
- Pour chaque ligne du résultat, cherche une correspondance avec la nouvelle table
- Produit une ligne de résultat pour chaque correspondance.
Donc si on lance la requête :
SELECT clients.nom, produit.libelle, lignes_commande.quantite
FROM clients
INNER JOIN commandes
ON clients.id_client = commandes.id_client
INNER JOIN lignes_commande
ON commandes.id_commande = lignes_commande.id_commande
INNER JOIN produits
ON lignes_commande.id_produit = produits.id_produit;
-
Ajoute à Clients les commandes ayant une correspondance avec un client
Les colonnes ne sont pas toutes représentées
ID_CLIENT NOM ID_COMMANDE ID_CLIENT MONTANT 1 Martin 101 1 250 1 Martin 102 1 90 2 Dubois 103 2 120 -
Ajoute au résultat de 1, les lignes de commandes ayant une correspondance avec l'id de commande
Les colonnes ne sont pas toutes représentées
ID_CLIENT NOM ID_COMMANDE ID_CLIENT MONTANT ID_COMMANDE ID_PRODUIT QUANTITE 1 Martin 101 1 250 101 10 1 1 Martin 101 1 250 101 11 2 2 Dubois 103 2 120 103 11 1 Note : La commande 102 a disparu, car aucune ligne de commande n'a pu correspondre. Le INNER JOIN élimine les lignes qui n'ont pas de correspondances.
-
Ajoute au résultat de 2, les informations de produits correspondants
Les colonnes ne sont pas toutes représentées
ID_CLIENT NOM ID_COMMANDE ID_CLIENT MONTANT ID_COMMANDE ID_PRODUIT QUANTITE ID_PRODUIT LIBELLE 1 Martin 101 1 250 101 10 1 10 Clavier 1 Martin 101 1 250 101 11 2 11 Souris 2 Dubois 103 2 120 103 11 1 11 Souris -
Extrait les colonnes demandées dans le SELECT
NOM Libelle Quantite Martin Clavier 1 Martin Souris 2 Dubois Souris 1
🎯 Notes importantes¶
✔ Une jointure dépend toujours de la précédente (effet domino)
✔ La requête se lit de gauche à droite (important pour les jointures externes)
✔ Chaque jointure ajoute des colonnes
✔ Peut ajouter des lignes si plus d'une correspondance, mais peut aussi retirer des lignes si aucune correspondance (INNER JOIN)
✔ Il est possible d'utiliser différentes jointures dans un SELECT, mais l'effet domino est toujorus présent