UAA 7    Base de données

Les jointures SQL

Les jointures permettent de combiner des données provenant de plusieurs tables. Elles sont essentielles pour exploiter une base de données relationnelle.

1. Exemple de tables utilisées


Clients
-------------------------
ID | Nom     | Ville
1  | Alice   | Paris
2  | Bob     | Lyon
3  | Clara   | Lille

Commandes
-------------------------
NumCommande | ClientID | Montant
101         | 1        | 120
102         | 2        | 80
103         | 1        | 45
  

2. INNER JOIN

Renvoie uniquement les lignes qui correspondent dans les deux tables.


SELECT Clients.Nom, Commandes.Montant
FROM Clients
INNER JOIN Commandes
ON Clients.ID = Commandes.ClientID;
  

Résultat :


Nom    | Montant
Alice  | 120
Bob    | 80
Alice  | 45
  

Clara n’apparaît pas car elle n’a pas de commande.

3. LEFT JOIN

Renvoie toutes les lignes de la table de gauche, même sans correspondance.


SELECT Clients.Nom, Commandes.Montant
FROM Clients
LEFT JOIN Commandes
ON Clients.ID = Commandes.ClientID;
  

Résultat :


Nom    | Montant
Alice  | 120
Alice  | 45
Bob    | 80
Clara  | NULL
  

Clara apparaît avec NULL car elle n’a pas de commande.

4. RIGHT JOIN

Renvoie toutes les lignes de la table de droite, même sans correspondance.


SELECT Clients.Nom, Commandes.Montant
FROM Clients
RIGHT JOIN Commandes
ON Clients.ID = Commandes.ClientID;
  

Résultat :


Nom    | Montant
Alice  | 120
Bob    | 80
Alice  | 45
  

Ici, toutes les commandes ont un client, donc pas de NULL.

5. FULL OUTER JOIN

Renvoie toutes les lignes des deux tables, même sans correspondance.

(Disponible dans PostgreSQL, SQL Server, Oracle — pas dans MySQL.)


SELECT Clients.Nom, Commandes.Montant
FROM Clients
FULL OUTER JOIN Commandes
ON Clients.ID = Commandes.ClientID;
  

Résultat :


Nom    | Montant
Alice  | 120
Bob    | 80
Alice  | 45
Clara  | NULL
NULL   | (commande sans client)*
  

*Ce cas n’existe pas dans notre exemple, mais il est possible.

6. Résumé des jointures