Code SQL copié dans le presse-papiers
Apprenez à utiliser le SQL FULL OUTER JOIN pour récupérer tous les enregistrements des deux tables, avec des NULL là où il n'y a pas de correspondance. Cette leçon explique la logique, la syntaxe, les astuces pour MySQL et les cas d'usage comme la synchronisation de bases ou la recherche de différences. Maîtrisez la récupération complète de données avec la base Sakila.
RU EN PT

Leçon 5.5 : FULL OUTER JOIN — Tout combiner des deux tables

Le FULL OUTER JOIN est le type de jointure le plus inclusif. Il retourne toutes les lignes lorsqu'il y a une correspondance dans l'une ou l'autre table. C'est essentiellement une combinaison de LEFT JOIN et de RIGHT JOIN.

Qu'est-ce qu'un FULL OUTER JOIN ?

Un FULL OUTER JOIN crée un résultat qui inclut tous les enregistrements des deux tables :

  • Si une ligne correspond, les colonnes des deux tables sont remplies.
  • Si une ligne de gauche n'a pas de correspondance à droite, les colonnes de droite sont NULL.
  • Si une ligne de droite n'a pas de correspondance à gauche, les colonnes de gauche sont NULL.

Visualisation :

   Table A (potential_leads)    Table B (active_clients)
   +----+----------+            +----+----------+
   | id | name     |            | id | status   |
   +----+----------+            +----+----------+
   | 1  | Alice    | <--------> | 1  | Active   | (Correspondance !)
   | 2  | Bob      | <--------? | NULL          | (Lead uniquement, pas encore client)
   | NULL          | <--------> | 3  | Active   | (Client uniquement, pas dans les leads)
   +----+----------+            +----+----------+

Syntaxe du FULL OUTER JOIN

SELECT
    table1.column1,
    table2.column2
FROM
    table1
FULL OUTER JOIN
    table2 ON table1.common_column = table2.common_column;

Attention à la compatibilité : Toutes les bases de données ne supportent pas FULL OUTER JOIN nativement.

  • PostgreSQL, SQL Server et Oracle le supportent.
  • MySQL et MariaDB ne le supportent PAS.

Astuce pour MySQL/MariaDB

Comme MySQL ne propose pas FULL OUTER JOIN, on obtient le même résultat en combinant un LEFT JOIN et un RIGHT JOIN avec UNION :

SELECT * FROM table1 LEFT JOIN table2 ON table1.id = table2.id
UNION
SELECT * FROM table1 RIGHT JOIN table2 ON table1.id = table2.id;

Exemple pratique

Imaginons que l'on fusionne les données de deux agences. L'agence A a sa propre liste de clients, l'agence B aussi. On veut une liste complète de tous les clients, montrant où ils se recoupent.

SELECT
    a.customer_name AS branch_a_name,
    b.customer_name AS branch_b_name
FROM
    branch_a_customers AS a
FULL OUTER JOIN
    branch_b_customers AS b ON a.customer_id = b.customer_id;

Points clés de cette leçon

  • FULL OUTER JOIN retourne tous les enregistrements des deux tables.
  • Il utilise des NULL pour combler les manques de correspondance.
  • C'est l'outil idéal pour synchroniser des bases ou trouver des différences entre deux listes.
  • Si votre base ne le supporte pas (comme MySQL), utilisez une UNION de LEFT et RIGHT JOIN.