Oracle DB : différences entre les jointures LEFT JOIN et LEFT OUTER JOIN

La différence entre LEFT JOIN et LEFT OUTER JOIN reste floue pour pour beaucoup. Et nombreux également sont ceux pour qui le mot outer (externe) n’est pas loin d’être facultatif.

La différence entre LEFT JOIN et LEFT OUTER JOIN reste floue pour pour beaucoup. Et nombreux également sont ceux pour qui le mot outer (externe) n’est pas loin d’être facultatif.

Le problème est le suivant. Sachant que dans Oracle, une jointure gauche (LEFT JOIN) constitue par défaut une jointure externe (OUTER JOIN) l'usage des termes INNER (interne) et OUTER (externe) apparait étrange. En effet, il devrait être évident que INNER s'associe uniquement à JOIN ou à FULL JOIN (qui logiquement est la même chose si interne) pour fournir toutes les correspondances présentes dans deux tables. Et que OUTER s'associe à LEFT, RIGHT et FULL.

SQL

De fait, les jointures dans le SGBD d’Oracle (et particulièrement LEFT JOIN et LEFT OUTER JOIN) peuvent se révéler très déroutantes, encore plus pour les débutants.

Définissons chacune d'elles pour répondre à d'autres questions récurrentes à leur sujet.

Oracle dispose de trois types de jointures externes (OUTER JOIN) : LEFT, RIGHT et FULL.

Une jointure externe gauche (LEFT OUTER JOIN) contient tous les enregistrements de la table de « gauche », même si elle n'a aucune correspondance dans la table de « droite » spécifiée dans la jointure. Une jointure externe droite (RIGHT OUTER JOIN) contient tous les enregistrements de la table de « droite », même si elle n'a aucune correspondance dans la table de « gauche ». Une jointure externe complète (FULL OUTER JOIN) contient tous les enregistrements des tables de gauche et de droite.

Une jointure externe (OUTER JOIN) étend le résultat d'une jointure simple en renvoyant toutes les lignes qui satisfont la condition de jointure, mais aussi tout ou partie des lignes issues d'une table donnée, pour lesquelles aucune ligne de l'autre table ne satisfait la condition de jointure.

Le mot-clé OUTER (externe) est facultatif. Toutefois, en réalité, il devrait être obligatoire. Il est d’ailleurs recommandé de systématiquement l'inclure dans les jointures externes d'Oracle (OUTER JOIN) pour se rappeler qu'il s'agit bien d'une jointure externe.

Rappelons également au passage que les mots-clés LEFT, RIGHT et FULL sont obligatoires, au même titre que JOIN. Les types LEFT, RIGHT et FULL OUTER JOIN sont les seuls types de jointure externe (OUTER JOIN).

La commande de jointure interne INNER JOIN signifie que toutes les lignes de résultats ont été produites par la correspondance à une condition entre les deux tables. Une commande de jointure externe, OUTER JOIN, affiche des lignes de résultats là où parfois il n'y a pas de correspondance, mais où les lignes d'une table ou de l'autre, ou des deux, sont renvoyées sans correspondance.

Hormis les types interne et externe, il existe un autre type de jointure : la jointure croisée, CROSS JOIN.

Pour approfondir sur Base de données

Close