INNER JOIN – Jointure interne
Bonne lecture et bon apprentissage !
Junior TSAFACK – 08/08/2026
⏱️ Temps de lecture estimé : 6 minutes
Dans le langage SQL, la commande INNER JOIN, aussi appelée EQUIJOIN, est un type de jointure très commun pour lier plusieurs tables entre elles. Cette commande retourne les enregistrements lorsqu’il y a au moins une ligne dans chaque colonne qui correspond à la condition.
Bon à savoir :
INNER JOINne retourne que les lignes qui ont une correspondance dans les deux tables. Si une ligne d’une table n’a pas de correspondance dans l’autre table, elle n’apparaît pas dans le résultat.
Syntaxe
Section titled “Syntaxe”Pour utiliser ce type de jointure, il convient d’utiliser une requête SQL avec cette syntaxe :
SELECT *FROM table1INNER JOIN table2 ON table1.id = table2.fk_id;La syntaxe ci-dessus stipule qu’il faut sélectionner les enregistrements des tables table1 et table2 lorsque les données de la colonne id de table1 sont égales aux données de la colonne fk_id de table2.
Syntaxe alternative avec WHERE
Section titled “Syntaxe alternative avec WHERE”La jointure peut aussi être écrite de la façon suivante :
SELECT *FROM table1, table2WHERE table1.id = table2.fk_id;La syntaxe avec la condition WHERE est une manière alternative de faire la jointure mais qui possède l’inconvénient d’être moins facile à lire s’il y a déjà plusieurs conditions dans le WHERE.
Recommandation : Il est préférable d’utiliser la syntaxe explicite avec
INNER JOINpour une meilleure lisibilité, surtout pour les requêtes complexes.
Exemple concret
Section titled “Exemple concret”Imaginons une application qui possède une table utilisateur ainsi qu’une table commande qui contient toutes les commandes effectuées par les utilisateurs.
Table « utilisateur » :
| id | prenom | nom | ville | |
|---|---|---|---|---|
| 1 | Aimée | Marechal | [email protected] | Paris |
| 2 | Esmée | Lefort | [email protected] | Lyon |
| 3 | Marine | Prevost | [email protected] | Lille |
| 4 | Luc | Rolland | [email protected] | Marseille |
Table « commande » :
| utilisateur_id | date_achat | num_facture | prix_total |
|---|---|---|---|
| 1 | 2013-01-23 | A00103 | 203.14 |
| 1 | 2013-02-14 | A00104 | 124.00 |
| 2 | 2013-02-17 | A00105 | 149.45 |
| 2 | 2013-02-21 | A00106 | 235.35 |
| 5 | 2013-03-02 | A00107 | 47.58 |
Pour afficher toutes les commandes associées aux utilisateurs, il est possible d’utiliser la requête suivante :
SELECT utilisateur.id, utilisateur.prenom, utilisateur.nom, commande.date_achat, commande.num_facture, commande.prix_totalFROM utilisateurINNER JOIN commande ON utilisateur.id = commande.utilisateur_id;Résultat :
| id | prenom | nom | date_achat | num_facture | prix_total |
|---|---|---|---|---|---|
| 1 | Aimée | Marechal | 2013-01-23 | A00103 | 203.14 |
| 1 | Aimée | Marechal | 2013-02-14 | A00104 | 124.00 |
| 2 | Esmée | Lefort | 2013-02-17 | A00105 | 149.45 |
| 2 | Esmée | Lefort | 2013-02-21 | A00106 | 235.35 |
Observations :
- Les utilisateurs 3 (Marine) et 4 (Luc) n’apparaissent pas car ils n’ont aucune commande.
- La commande de l’utilisateur 5 (qui n’existe pas dans la table
utilisateur) n’apparaît pas. - Seules les lignes qui ont une correspondance dans les deux tables sont retournées.
Utiliser des alias pour simplifier la requête
Section titled “Utiliser des alias pour simplifier la requête”La même requête peut être simplifiée en utilisant des alias :
SELECT u.id, u.prenom, u.nom, c.date_achat, c.num_facture, c.prix_totalFROM utilisateur uINNER JOIN commande c ON u.id = c.utilisateur_id;INNER JOIN avec trois tables
Section titled “INNER JOIN avec trois tables”On peut enchaîner plusieurs INNER JOIN pour lier trois tables ou plus :
Schéma : utilisateur → commande → produit
SELECT u.nom, u.prenom, c.date_achat, c.num_facture, p.nom AS produit_nom, p.prixFROM utilisateur uINNER JOIN commande c ON u.id = c.utilisateur_idINNER JOIN commande_produit cp ON c.id = cp.commande_idINNER JOIN produit p ON cp.produit_id = p.id;INNER JOIN avec condition supplémentaire
Section titled “INNER JOIN avec condition supplémentaire”On peut ajouter une condition WHERE après le INNER JOIN pour filtrer davantage :
SELECT u.id, u.nom, c.date_achat, c.prix_totalFROM utilisateur uINNER JOIN commande c ON u.id = c.utilisateur_idWHERE c.prix_total > 150;Résultat :
| id | nom | date_achat | prix_total |
|---|---|---|---|
| 1 | Aimée | 2013-01-23 | 203.14 |
| 2 | Esmée | 2013-02-21 | 235.35 |
INNER JOIN sur plusieurs colonnes
Section titled “INNER JOIN sur plusieurs colonnes”Il est possible de joindre sur plusieurs colonnes en utilisant AND :
SELECT *FROM historique_prix hpINNER JOIN produit p ON hp.produit_id = p.id AND hp.date_effet = p.date_mise_a_jour;INNER JOIN avec clause USING (MySQL, PostgreSQL, SQLite)
Section titled “INNER JOIN avec clause USING (MySQL, PostgreSQL, SQLite)”Si les colonnes ont le même nom dans les deux tables, on peut utiliser USING pour simplifier la syntaxe :
SELECT *FROM utilisateurINNER JOIN commande USING (id);Dans cet exemple, USING (id) est équivalent à ON utilisateur.id = commande.id.
Remarque :
USINGest supporté par MySQL, PostgreSQL, SQLite et Oracle (avec des nuances), mais pas par SQL Server.
Performance des INNER JOIN
Section titled “Performance des INNER JOIN”Pour garantir de bonnes performances :
- Indexez les colonnes de jointure : les colonnes utilisées dans la clause
ONdoivent être indexées. - Évitez les jointures sur des colonnes non indexées sur de grandes tables.
- Limitez les colonnes sélectionnées : préférez une liste explicite de colonnes à
*. - Filtrez tôt : utilisez
WHEREpour réduire le nombre de lignes avant la jointure (le SGBD optimise automatiquement, mais c’est une bonne pratique).
Différence entre INNER JOIN et LEFT JOIN
Section titled “Différence entre INNER JOIN et LEFT JOIN”| INNER JOIN | LEFT JOIN |
|---|---|
| Retourne uniquement les lignes correspondantes dans les deux tables | Retourne toutes les lignes de la table de gauche + les correspondances |
| Les utilisateurs sans commande sont exclus | Les utilisateurs sans commande apparaissent (avec des valeurs NULL pour les colonnes de commande) |
Nous verrons LEFT JOIN en détail dans un prochain chapitre.
Erreurs courantes
Section titled “Erreurs courantes”| Erreur | Cause | Solution |
|---|---|---|
| Oubli de la condition ON | Jointure sans condition | Ajouter ON avec la condition appropriée |
| Colonne ambiguë (error: ambiguous column) | Le nom de colonne existe dans plusieurs tables | Préfixer la colonne avec le nom de la table |
| Syntaxe incorrecte | Ordre des mots-clés incorrect | Vérifier l’ordre : SELECT ... FROM ... INNER JOIN ... ON ... |
Prochain chapitre
Section titled “Prochain chapitre”Vous savez désormais comment utiliser INNER JOIN pour lier deux tables en ne gardant que les correspondances. Mais que faire si vous souhaitez associer chaque ligne d’une table avec chaque ligne d’une autre table ?
👉 Chapitre 33 : CROSS JOIN – Jointure cartésienne
Bonne continuation !
Junior TSAFACK – 08/08/2026