Dans le langage SQL la commande INNER JOIN, aussi appelée EQUIJOIN, est un type de jointures très communes 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.
Syntaxe
Pour utiliser ce type de jointure il convient d’utiliser une requête SQL avec cette syntaxe :
SELECT * FROM table1 INNER 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 est égal aux données de la colonne fk_id de table2.
La jointure SQL peux aussi être écrite de la façon suivante :
SELECT * FROM table1 INNER JOIN table2 WHERE 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.
Exemple
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 | aime.marechal@example.com | Paris |
2 | Esmée | Lefort | esmee.lefort@example.com | Lyon |
3 | Marine | Prevost | m.prevost@example.com | Lille |
4 | Luc | Rolland | lucrolland@example.com | 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 id, prenom, nom, date_achat, num_facture, prix_total FROM utilisateur INNER JOIN commande ON utilisateur.id = commande.utilisateur_id
Résultats :
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 |
Le résultat de la requête montre parfaite la jointure entre les 2 tables. Les utilisateurs 3 et 4 ne sont pas affichés puisqu’il n’y a pas de commandes associés à ces utilisateurs.
Attention : il est important de noter que si un utilisateur à été supprimé, alors on ne verra pas ses commandes dans la liste puisque INNER JOIN retourne uniquement les résultats ou la condition est vrai dans les 2 tables.