Guide Complet sur les 4 Clauses JOIN en SQL

Introduction

Les opérations JOIN en SQL sont essentielles pour combiner des données provenant de plusieurs tables en fonction d'une condition de correspondance. Elles permettent de créer des requêtes complexes et d'extraire des informations pertinentes à partir de bases de données relationnelles. Dans ce guide, nous allons explorer en détail les 4 types principaux de JOIN :

  1. INNER JOIN

  2. LEFT JOIN (ou LEFT OUTER JOIN)

  3. RIGHT JOIN (ou RIGHT OUTER JOIN)

  4. FULL JOIN (ou FULL OUTER JOIN)

Clauses-JOIN

Chaque type de JOIN sera illustré par des exemples concrets, des schémas explicatifs et des requêtes SQL pratiques pour vous aider à mieux comprendre leur fonctionnement et leur utilisation.

1. INNER JOIN

Description

L'INNER JOIN retourne uniquement les lignes où il y a une correspondance entre les deux tables. Si aucune correspondance n'est trouvée, la ligne est exclue du résultat.

Schéma

 
   Table A         Table B
  ┌─────────┐     ┌─────────┐
  │   A1    │     │   B1    │
  │   A2    │  +  │   B2    │  =  [A2, B2]  ← Correspondance trouvée
  │   A3    │     │   B3    │
  └─────────┘     └─────────┘

Résultat de INNER JOIN :
[A2, B2]

inner_join

Exemple Pratique

Supposons deux tables :

  • Clients (ClientID, Nom)

  • Commandes (OrderID, ClientID, Date)

La requête suivante renvoie uniquement les clients ayant passé une commande :

SELECT c.ClientID, c.Nom, o.OrderID, o.Date
FROM Clients c
INNER JOIN Commandes o
  ON c.ClientID = o.ClientID;
 

Cas d'utilisation

  • Lorsque vous souhaitez obtenir uniquement les enregistrements qui ont une correspondance dans les deux tables.

  • Par exemple, pour lister les clients ayant effectué au moins une commande.


2. LEFT JOIN (ou LEFT OUTER JOIN)

Description

Le LEFT JOIN renvoie toutes les lignes de la table de gauche (première table) et les lignes correspondantes de la table de droite. Si aucune correspondance n'est trouvée, les colonnes de la table de droite contiendront des valeurs NULL.

Schéma

 
   Table A         Table B
  ┌─────────┐     ┌─────────┐
  │   A1    │     │         │  ← Pas de correspondance
  │   A2    │  +  │   B2    │  ← Correspondance trouvée
  │   A3    │     │         │  ← Pas de correspondance
  └─────────┘     └─────────┘

Résultat de LEFT JOIN :
[A1, NULL]
[A2, B2]
[A3, NULL]

Exemple Pratique

Pour obtenir la liste de tous les clients, même ceux qui n'ont pas passé de commande :

SELECT c.ClientID, c.Nom, o.OrderID, o.Date
FROM Clients c
LEFT JOIN Commandes o
  ON c.ClientID = o.ClientID;
 

Cas d'utilisation

  • Lorsque vous souhaitez inclure tous les enregistrements de la table de gauche, même s'il n'y a pas de correspondance dans la table de droite.

  • Par exemple, pour identifier les clients qui n'ont jamais passé de commande.


3. RIGHT JOIN (ou RIGHT OUTER JOIN)

Description

Le RIGHT JOIN est l'inverse du LEFT JOIN : il renvoie toutes les lignes de la table de droite, et les lignes correspondantes de la table de gauche. En l'absence de correspondance, les colonnes de la table de gauche contiendront des valeurs NULL.

Schéma

 
   Table A         Table B
  ┌─────────┐     ┌─────────┐
  │         │     │   B1    │  ← Pas de correspondance
  │   A2    │  +  │   B2    │  ← Correspondance trouvée
  │         │     │   B3    │  ← Pas de correspondance
  └─────────┘     └─────────┘

Résultat de RIGHT JOIN :
[NULL, B1]
[A2, B2]
[NULL, B3]

Exemple Pratique

Pour obtenir la liste de toutes les commandes, même celles associées à un client non référencé (cas rare mais possible en cas d’erreur de saisie ou d’intégrité) :

SELECT c.ClientID, c.Nom, o.OrderID, o.Date
FROM Clients c
RIGHT JOIN Commandes o
  ON c.ClientID = o.ClientID;

Cas d'utilisation

  • Lorsque vous souhaitez inclure tous les enregistrements de la table de droite, même s'il n'y a pas de correspondance dans la table de gauche.

  • Par exemple, pour identifier les commandes qui ne sont pas associées à un client valide.


4. FULL JOIN (ou FULL OUTER JOIN)

Description

Le FULL JOIN combine les résultats du LEFT JOIN et du RIGHT JOIN. Il renvoie toutes les lignes des deux tables, en remplissant avec des NULL là où il n'existe pas de correspondance.

Schéma

 
   Table A         Table B
  ┌─────────┐     ┌─────────┐
  │   A1    │     │   B1    │  ← Pas de correspondance dans A pour B1
  │   A2    │  +  │   B2    │  ← Correspondance trouvée
  │   A3    │     │   B3    │  ← Pas de correspondance dans A pour B3
  └─────────┘     └─────────┘

Résultat de FULL JOIN :
[A1, NULL]
[A2, B2]
[NULL, B1]
[NULL, B3]

Exemple Pratique

Pour obtenir une vue complète combinant tous les clients et toutes les commandes, même s’il manque une correspondance d’un côté ou de l’autre :

SELECT c.ClientID, c.Nom, o.OrderID, o.Date
FROM Clients c
FULL OUTER JOIN Commandes o
  ON c.ClientID = o.ClientID;
 

Cas d'utilisation

  • Lorsque vous souhaitez obtenir une vue complète des données des deux tables, y compris les enregistrements sans correspondance.

  • Par exemple, pour identifier à la fois les clients sans commandes et les commandes sans clients associés.

Remarque

Tous les SGBD ne supportent pas la syntaxe FULL OUTER JOIN. Dans ce cas, il est possible de simuler cette opération avec une union de LEFT JOIN et RIGHT JOIN :

SELECT c.ClientID, c.Nom, o.OrderID, o.Date
FROM Clients c
LEFT JOIN Commandes o ON c.ClientID = o.ClientID
UNION
SELECT c.ClientID, c.Nom, o.OrderID, o.Date
FROM Clients c
RIGHT JOIN Commandes o ON c.ClientID = o.ClientID;

Conclusion

Les JOIN en SQL sont des outils puissants pour combiner des données provenant de plusieurs tables. Voici un résumé des 4 types de JOIN :

  1. INNER JOIN : Renvoie uniquement les lignes avec correspondance.

  2. LEFT JOIN : Renvoie toutes les lignes de la table de gauche, avec des valeurs NULL si aucune correspondance n’existe.

  3. RIGHT JOIN : Renvoie toutes les lignes de la table de droite, avec des valeurs NULL si aucune correspondance n’existe.

  4. FULL JOIN : Renvoie toutes les lignes des deux tables, complétant avec des NULL en cas de manque de correspondance.

Ces exemples et schémas devraient vous aider à mieux comprendre et utiliser ces différentes clauses JOIN dans vos requêtes SQL. N'hésitez pas à expérimenter avec vos propres données pour voir par vous-même l'impact de chaque type de JOIN sur vos résultats.