-
SQL > Différence entre inner join, left join et right join
INNER JOIN,LEFT JOINetRIGHT JOINdéterminent quelles lignes sont incluses dans le résultat selon la correspondance entre les tables.INNER JOIN
> Retourne uniquement les lignes où il y a une correspondance dans les deux tables
> Les lignes sans correspondance sont exclues
SELECT * FROM Clients INNER JOIN Commandes ON Clients.id = Commandes.client_id; -- Seuls les clients ayant passé commande apparaissentLEFT JOIN
> Retourne toutes les lignes de la table de gauche (première table)
> Plus les correspondances de la table de droite
> Si pas de correspondance : valeurs NULL pour les colonnes de droite
-- Tous les clients, même sans commande SELECT * FROM Clients LEFT JOIN Commandes ON Clients.id = Commandes.client_id; -- Clients sans commande ont NULL pour les colonnes Commandes
RIGHT JOIN
> Inverse du LEFT JOIN : toutes les lignes de la table de droite
> Plus les correspondances de la table de gauche
> Moins utilisé car on peut généralement réorganiser les tables
-- Toutes les commandes, même sans client (ex: données orphelines) SELECT * FROM Clients RIGHT JOIN Commandes ON Clients.id = Commandes.client_id;Comparaison visuelle
Table A Table B id | nom id | commande 1 | Alice 1 | Livre 2 | Bob 3 | Stylo 3 | Charlie INNER JOIN (A ∩ B) → Alice (id1) et Charlie (id3) LEFT JOIN (A) → Alice, Bob (NULL), Charlie RIGHT JOIN (B) → Alice, Charlie, Stylo (NULL pour nom)
Importance pratique
> INNER JOIN : "Donne-moi ce qui existe dans les deux"
> LEFT JOIN : "Donne-moi tout de A, avec les infos de B si elles existent"
> RIGHT JOIN : "Donne-moi tout de B, avec les infos de A si elles existent"
Cas d’usage courants
> INNER JOIN : Analyse de données corrélées, rapports transactionnels
> LEFT JOIN : Listes complètes avec détails optionnels, détection de données manquantes
> RIGHT JOIN : Moins courant, souvent remplacé par LEFT JOIN en inversant les tables
Bonne pratique
Préférer LEFT JOIN à RIGHT JOIN pour plus de lisibilité. Un RIGHT JOIN peut toujours être réécrit en LEFT JOIN en inversant l’ordre des tables.