Mot-clé OUTER JOIN de MySQL
Le mot-clé OUTER JOIN
de MySQL est utilisé pour extraire des enregistrements de deux tableaux, y compris les enregistrements qui n'ont pas de valeurs correspondantes dans les tableaux liés. Il garantit que tous les enregistrements d'un tableau sont inclus dans les résultats et, lorsqu'aucune correspondance n'est trouvée, des NULL sont insérés dans les colonnes du tableau concerné.
Utilisation
OUTER JOIN
est utilisé lorsque vous devez inclure toutes les lignes d'un tableau ou des deux tableaux, qu'il y ait ou non une correspondance dans l'autre tableau. Il en existe deux types principaux : LEFT OUTER JOIN
(ou simplement LEFT JOIN
) et RIGHT OUTER JOIN
(ou simplement RIGHT JOIN
).
SELECT columns
FROM table1
LEFT|RIGHT OUTER JOIN table2
ON table1.common_column = table2.common_column;
Dans cette syntaxe, le mot-clé LEFT|RIGHT OUTER JOIN
détermine les tableaux dont les lignes sont intégralement conservées dans le jeu de résultats.
Note sur le FULL OUTER JOIN
MySQL ne prend pas directement en charge FULL OUTER JOIN
. Toutefois, vous pouvez obtenir des résultats similaires en utilisant une combinaison de LEFT JOIN
et RIGHT JOIN
avec UNION
.
SELECT columns
FROM table1
LEFT JOIN table2 ON table1.common_column = table2.common_column
UNION
SELECT columns
FROM table1
RIGHT JOIN table2 ON table1.common_column = table2.common_column;
Exemples
1. Basic LEFT OUTER JOIN
SELECT customers.customer_id, orders.order_id
FROM customers
LEFT OUTER JOIN orders ON customers.customer_id = orders.customer_id;
Cette requête permet de récupérer tous les clients et leurs commandes, le cas échéant. Les clients sans commande apparaîtront toujours dans le résultat avec NULL
dans les colonnes de commande.
2. JOINTURE EXTERNE DROITE
SELECT products.product_id, orders.order_id
FROM products
RIGHT OUTER JOIN orders ON products.product_id = orders.product_id;
Ici, toutes les commandes sont répertoriées, y compris celles pour lesquelles il n'y a pas d'entrée de produit correspondante, en remplissant NULL
pour les détails du produit.
3. Combiner LEFT JOIN avec la clause WHERE
SELECT employees.employee_id, departments.department_name
FROM employees
LEFT JOIN departments ON employees.department_id = departments.department_id
WHERE departments.department_name IS NULL;
Cette requête permet de trouver les employés qui ne sont affectés à aucun département en listant tous les employés et en filtrant ceux dont le nom de département est NULL
.
Conseils et bonnes pratiques
- Choisissez le type de jointure correct. Utilisez
LEFT JOIN
lorsque vous avez besoin de tous les tableaux etRIGHT JOIN
lorsque vous avez besoin de tous les tableaux. - Gardez à l'esprit les performances. Les opérations
OUTER JOIN
peuvent être coûteuses en termes de performances ; assurez-vous que des index sont utilisés sur les colonnes de jointure. L'analyse des plans d'exécution des requêtes permet d'optimiser les performances. - Faites attention aux NULL. Réfléchissez à la manière dont votre application ou les requêtes ultérieures traiteront les valeurs NULL dans l'ensemble des résultats. Utilisez des fonctions telles que
IFNULL()
ouCOALESCE()
pour remplacerNULL
par des valeurs par défaut. - A utiliser avec précaution. Lorsque vous filtrez à l'aide de
WHERE
, veillez à ce que l'effet deOUTER JOIN
ne soit pas annulé par inadvertance.