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 JOINnativement.
- 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.