Les jointures ou comment rechercher dans plusieurs tables en même temps

Les jointures en SQL permettent d’associer plusieurs tables dans une même requête.
Cela permet d’exploiter la puissance des bases de données relationnelles pour obtenir des résultats qui combinent les données de plusieurs tables de manière efficace.

Explication des jointures

Pour comprendre toutes les jointures possibles et comprendre leurs interets, nous allons nous exercer sur un exemple simple.

Un cas pratique qui arrive très souvent en base de données est le stockage de données clients et la création et le stockage de factures pour chaque client d'une société.
Vous trouverez ci-dessous les tables qui represente la base données contenant la table "client" et la table "facture".

Tableau contenant les informations clients d'une société
client
Id_client (Clé primaire) Nom Prenom Date_naissance Email Tel Pays
1 Smith Kevin 1990-09-04 k.smith@estiam.com +33 612.459.867 France
2 - Kaaliah 1990-09-04 - +33 612.459.867 France
3 - Kenny 1990-09-04 - +33 612.459.867 France
4 - Cathy 1990-09-04 - +33 612.459.867 France


Tableau contenant les commandes de clients
Commande
Id_commande (clé primaire) Id_client (clé étrangère) Date Prix
150 1 1990-09-04 1200€
151 2 1990-09-04 3200€
155 2 1990-09-04 900€
160 3 1990-09-04 6500€
170 10 1990-09-04 300€

Explication des types de jointures les plus courants

Pour visualiser les types de jointures, suivez le lien : https://sql.sh/cours/jointures

1 - INNER JOIN
Utilité : Sélectionne uniquement les enregistrements qui ont des valeurs correspondantes dans les deux tables.
Exemple d'Usage : Trouver tous les clients et leurs commandes.
SELECT client.Nom, Commande.Id_commande
FROM client
INNER JOIN Commande ON client.Id_client = Commande.Id_client;
2 - LEFT JOIN
Utilité : Sélectionne tous les enregistrements de la table de gauche (left) et les enregistrements correspondants de la table de droite. Si aucun match n'est trouvé, le résultat est NULL du côté droit.
Exemple d'Usage : Lister tous les clients et leurs commandes, y compris ceux qui n'ont pas de commande.
SELECT client.Nom, Commande.Id_commande
FROM client
LEFT JOIN Commande ON client.Id_client = Commande.Id_client;
3 - RIGHT JOIN
Utilité : Sélectionne tous les enregistrements de la table de droite et les enregistrements correspondants de la table de gauche. Si aucun match n'est trouvé, le résultat est NULL du côté gauche.
Exemple d'Usage : Lister toutes les commandes et le client associé, y compris les commandes qui n'ont pas de client.
SELECT client.Nom, Commande.Id_commande
FROM client
RIGHT JOIN Commande ON client.Id_client = Commande.Id_client;
3 bis - RIGHT JOIN (sans intersection)
Utilité : Sélectionne tous les enregistrements de la table de droite, qui n'ont pas de correspondants dans la table de gauche.
Exemple d'Usage : Lister toutes les commandes qui n'ont pas de client.
SELECT client.Nom, Commande.Id_commande
FROM client
RIGHT JOIN Commande ON client.Id_client = Commande.Id_client
WHERE client.Id_client IS NULL;
4 - FULL JOIN
Utilité : Combine les résultats de LEFT JOIN et RIGHT JOIN. Sélectionne tous les enregistrements quand il y a une correspondance dans l'une des tables.
Exemple d'Usage : Lister tous les clients avec leurs commandes, y compris ceux sans commandes et les commandes sans clients.
SELECT client.Nom, Commande.Id_commande
FROM client
FULL OUTER JOIN Commande ON client.Id_client = Commande.Id_client;
4 bis - FULL JOIN (sans intersection)
Utilité :Sélectionne tous les enregistrements qui n'ont pas de correspondance dans l'une des tables.
Exemple d'Usage : Lister tous les clients sans commandes et les commandes sans clients.
SELECT client.Nom, Commande.Id_commande
FROM client
FULL OUTER JOIN Commande ON client.Id_client = Commande.Id_client
WHERE client.Id_client IS NULL
OR Commande.Id_client IS NULL;