🧚 Écoute ! Beekeeper Studio est une interface de base de données rapide, moderne et open source Télécharger
2 janvier 2024 Par Matthew Rathbone

Maîtriser SQL, c’est souvent savoir poser les bonnes questions. Quand tes données sont réparties sur plusieurs tables, la jointure externe complète devient franchement pratique. Assez courant dans certains systèmes de gestion de bases de données, le FULL OUTER JOIN est un peu plus délicat dans MySQL. Pourquoi ? Parce qu’il n’y est tout simplement pas pris en charge. Intéressant, non ? Mais pas de panique, il existe une solution de contournement !

Dans ce tutoriel, on explore en détail comment réaliser un full outer join dans MySQL. Accroche-toi, on plonge dans un bain d’exemples de code.

🔖 Référence rapide : besoin d’un aperçu rapide de tous les types de JOIN ? Jette un œil à notre aide-mémoire des JOIN SQL, avec des schémas et des exemples de code.

Qu’est-ce qu’un full outer join ?

Avant de commencer, définissons ce qu’est un FULL OUTER JOIN. En SQL, une jointure externe complète combine les effets d’une jointure externe gauche et d’une jointure externe droite. Autrement dit, elle récupère les enregistrements dont les valeurs correspondent dans les deux tables, ainsi que tous les enregistrements des deux tables qui n’ont pas de correspondance dans l’autre table.

Visualisation d’un full outer join

Voici un exemple. Supposons qu’on ait deux tables, Employees et Departments.

Table Employees :

id name
1 Alice
2 Bob
3 Charlie

Table Departments :

id department
2 HR
3 IT
4 Marketing

Avec la requête FULL OUTER JOIN :

SELECT * FROM Employees
FULL OUTER JOIN Departments ON Employees.id = Departments.id;

Le résultat sera :

Employees.id Employees.name Departments.id Departments.department
1 Alice NULL NULL
2 Bob 2 HR
3 Charlie 3 IT
NULL NULL 4 Marketing

Ce résultat combine tous les enregistrements de Employees et de Departments. Il comprend :

  • Les enregistrements dont la valeur id correspond dans les deux tables (Bob et Charlie).
  • Les enregistrements de Employees sans correspondance dans Departments (Alice).
  • Les enregistrements de Departments sans correspondance dans Employees (Marketing).

Bien que très utile, cette syntaxe n’est pas directement prise en charge par MySQL. Alors, comment s’en sortir ? Voyons ça.

Simuler un full outer join dans MySQL

Comme indiqué plus haut, MySQL ne prend pas explicitement en charge le mot-clé FULL OUTER JOIN. On peut toutefois obtenir le résultat voulu en combinant LEFT JOIN et UNION

Simuler un full outer join dans MySQL se fait en deux étapes :

  • Faire un LEFT JOIN sur la première table pour récupérer tous ses enregistrements, ainsi que les enregistrements correspondants de la seconde table.
  • Utiliser UNION pour combiner ces résultats avec ceux d’un RIGHT JOIN, afin de récupérer tous les enregistrements de la seconde table ainsi que les enregistrements correspondants de la première.

Voici comment fonctionne chaque partie :

Left Join :
Visualisation d’un left join

Right Join :
Visualisation d’un right join

Exemple de full outer join dans MySQL

Voici un exemple de cette solution de contournement, avec les mêmes données que précédemment

SELECT 
    Employees.id AS Employees_id, 
    Employees.name, 
    Departments.id AS Departments_id, 
    Departments.department
FROM 
    Employees
LEFT JOIN 
    Departments ON Employees.id = Departments.id

UNION

SELECT 
    Employees.id AS Employees_id, 
    Employees.name, 
    Departments.id AS Departments_id, 
    Departments.department
FROM 
    Departments
RIGHT JOIN 
    Employees ON Departments.id = Employees.id;

Cette requête se compose de deux parties :

  1. Un LEFT JOIN pour récupérer tous les enregistrements de la table Employees et les enregistrements correspondants de la table Departments.
  2. Un RIGHT JOIN pour récupérer tous les enregistrements de la table Departments et les enregistrements correspondants de la table Employees.

UNION combine les résultats de ces deux requêtes tout en éliminant les lignes en double.

Avec les mêmes tables d’exemple, le résultat sera :

Employees_id name Departments_id department
1 Alice NULL NULL
2 Bob 2 HR
3 Charlie 3 IT
NULL NULL 4 Marketing

Comme le FULL OUTER JOIN en SQL, ce résultat combine tous les enregistrements de Employees et de Departments.

UNION filtre automatiquement les doublons

Dans le cas précis de notre exemple avec les tables Employees et Departments, le UNION utilisé pour contourner l’absence de FULL OUTER JOIN dans MySQL ne produira pas de doublons. En effet, l’opérateur UNION élimine automatiquement les lignes en double de son résultat.

Pour clarifier, voyons comment UNION fonctionne dans ce contexte :

  • La première partie de la requête (le LEFT JOIN) récupère tous les enregistrements de la table Employees et les enregistrements correspondants de la table Departments. Cela inclut les lignes dont la valeur id correspond dans les deux tables et les lignes d’Employees sans correspondance dans Departments.

  • La seconde partie de la requête (le RIGHT JOIN) récupère tous les enregistrements de la table Departments et les enregistrements correspondants de la table Employees. Cela inclut les lignes dont la valeur id correspond dans les deux tables et les lignes de Departments sans correspondance dans Employees.

Comme UNION supprime les doublons, les lignes dont la valeur id correspond (celles qui apparaîtraient à la fois dans les résultats du LEFT JOIN et du RIGHT JOIN) n’apparaîtront qu’une seule fois dans le résultat final.

En résumé, utiliser UNION dans ce contexte garantit que chaque combinaison unique de données Employees et Departments n’apparaît qu’une fois dans le résultat, ce qui reproduit le comportement d’un FULL OUTER JOIN sans doublons.

Entraîne-toi dans Beekeeper Studio

J’espère que ce tutoriel sur le full outer join dans MySQL t’a été utile. Dans de prochains articles, on continuera à explorer d’autres fonctionnalités avancées de MySQL, avec plus d’exemples de code, en creusant pourquoi et comment elles fonctionnent. D’ici là, continue à pratiquer SQL, idéalement avec Beekeeper Studio.

Beekeeper Studio est une interface de base de données gratuite & open source

Le meilleur outil de requêtes & éditeur SQL que j’aie jamais utilisé. Il m’offre tout ce dont j’ai besoin pour gérer ma base de données. - ⭐⭐⭐⭐⭐ Mit

Beekeeper Studio est rapide, intuitif et facile à utiliser. Beekeeper prend en charge plein de bases de données et fonctionne parfaitement sous Windows, Mac et Linux.

La version Linux de Beekeeper est 100% complète : rien de bâclé, aucun compromis sur les fonctionnalités.

Ce que les utilisateurs disent de Beekeeper Studio

★★★★★
« Beekeeper Studio a complètement remplacé mon ancien workflow SQL. C’est rapide, intuitif, et ça rend le travail sur les bases de données à nouveau agréable. »
— Alex K., développeur base de données
★★★★★
« J’ai essayé beaucoup d’interfaces de base de données, mais Beekeeper trouve le parfait équilibre entre fonctionnalités et simplicité. Ça marche, tout simplement. »
— Sarah M., ingénieure full stack