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.
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".
client | ||||||
---|---|---|---|---|---|---|
Id_client (Clé primaire) | Nom | Prenom | Date_naissance | 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 |
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€ |
Pour visualiser les types de jointures, suivez le lien : https://sql.sh/cours/jointures
SELECT client.Nom, Commande.Id_commande
FROM client
INNER JOIN Commande ON client.Id_client = Commande.Id_client;
SELECT client.Nom, Commande.Id_commande
FROM client
LEFT JOIN Commande ON client.Id_client = Commande.Id_client;
SELECT client.Nom, Commande.Id_commande
FROM client
RIGHT JOIN Commande ON client.Id_client = Commande.Id_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;
SELECT client.Nom, Commande.Id_commande
FROM client
FULL OUTER JOIN Commande ON client.Id_client = Commande.Id_client;
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;