Retour à la liste des articles Articles
5 minutes de lecture

Guide illustré de la clause SQL OUTER JOIN

Nous avons déjà abordé le langage SQL CROSS JOIN et JOINT INTÉRIEUR . Il est temps d'en explorer un autre : OUTER JOIN. Qu'est-ce que c'est ? Comment fonctionne-t-elle ? Nous allons le découvrir !

Si vous avez lu nos autres articles, vous savez que vous pouvez relier les données de deux ou plusieurs tables de base de données en utilisant l'un des nombreux types d'opérateurs de jointure SQL. Aujourd'hui, nous allons aborder les trois types de OUTER JOIN: LEFT OUTER JOIN, RIGHT OUTER JOIN, et FULL OUTER JOIN. Ces opérateurs joignent des enregistrements en fonction de la correspondance des valeurs des lignes, mais ils le font un peu différemment des autres instructions de jointure.

Qu'est-ce qu'une jointure externe SQL ?

Pour répondre à cette question, nous devons nous pencher sur les différents types d'instructions OUTER JOIN:

  • LEFT OUTER JOIN retourne chaque enregistrement de la table de gauche et tous les enregistrements correspondants de la table de droite. Si aucune correspondance n'est trouvée, un NULL est affiché à côté de l'enregistrement non correspondant.
  • RIGHT OUTER JOIN renvoie tous les enregistrements de la table de droite et tous les enregistrements correspondants de la table de gauche. Si aucune correspondance n'est trouvée, un NULL est affiché à côté de l'enregistrement non apparié.
  • FULL OUTER JOIN renvoie tous les enregistrements des deux tables. Tous les enregistrements non appariés sont appariés avec des NULL.

Voyons maintenant les tables que nous allons utiliser pour illustrer ces opérateurs.

La table "shirt"ne possède qu'un seul champ, "color_shirt" :

color_shirt
yellow
green
blue

La table "pants"a également un champ, "color_pants" :

color_pants
pink
green
blue

Ces tables sont explicites. Imaginez-les comme les deux parties d'une tenue : la couleur de votre pantalon et la couleur de votre chemise. L'idée est de trouver des chemises et des pantalons de couleurs identiques.

Bon à savoir : La table de gauche est la première table listée et se trouve après la clause FROM. Le tableau de droite est le deuxième tableau de la liste et se trouve après la clause JOIN. Vous pouvez généralement omettre le mot-clé OUTER dans n'importe quel OUTER JOIN - FULL JOIN, LEFT JOIN et RIGHT JOIN fonctionneront tout aussi bien dans de nombreuses bases de données (mais vérifiez votre documentation pour être sûr).

Utilisation d'un LEFT OUTER JOIN

Le site LEFT OUTER JOIN récupère tous les enregistrements de la première table (gauche) et les associe aux enregistrements de la deuxième table (droite). Tous les enregistrements de la table de gauche qui ne correspondent pas sont également sélectionnés, mais avec des valeurs NULL à la place des enregistrements de la table de droite.

Jetez un coup d'œil à l'exemple.

SELECT color_shirt, color_pants 
FROM shirt
LEFT JOIN pants ON color_shirt=color_pants;

La table de gauche (après FROM) est "shirt"et la table de droite (après LEFT JOIN) est "pants". Le prédicat ON indique la condition permettant de faire correspondre les enregistrements de "shirt" avec les enregistrements de "pants". Cette condition est que les valeurs du champ "shirt"."color_shirt" et celles du champ "pants"."color_pants" doivent correspondre. S'il n'y a pas de correspondance, les enregistrements de la table "shirt"seront affichés, mais une valeur NULL sera placée à la place de l'enregistrement "pants" correspondant.

Voici les résultats de cette requête :

color_shirt color_pants
yellow NULL
green green
blue blue

Et voici une illustration du fonctionnement de cette requête et de ses résultats :

jointure gauche

Comme vous le voyez, les tenues vertes et bleues correspondantes sont ensemble. La chemise jaune n'a pas de pantalon car la table "pants" n'a pas de champs avec une valeur "jaune".

Utilisation d'un RIGHT OUTER JOIN

Le site RIGHT OUTER JOIN fonctionne comme le site LEFT JOIN, mais avec une différence majeure : il sélectionne tous les enregistrements de la bonne table (dans ce cas, "pants"). Les enregistrements de la table de gauche ("shirt") ne seront affichés que s'ils correspondent.

Regardez la requête :

SELECT color_shirt, color_pants 
FROM shirt	
RIGHT JOIN pants ON color_shirt=color_pants;

Voici le résultat :

color_shirt color_pants
NULL pink
green green
blue blue

Et voici l'illustration de l'utilisation de RIGHT JOIN et de ses résultats. Tous les pantalons sont affichés, mais il n'y a pas de chemise assortie au pantalon rose.

jointure à droite

Utilisation d'un FULL OUTER JOIN

Récapitulons ce que nous avons fait jusqu'à présent. Avec LEFT JOIN, toutes les chemises et tous les pantalons correspondants ont été retournés. Avec RIGHT JOIN, tous les pantalons et toutes les chemises correspondantes sont retournés. Que se passe-t-il si vous utilisez FULL OUTER JOIN? Tous les enregistrements des deux tables sont affichés. Si possible, les enregistrements correspondent ; sinon, un NULL est affiché à l'endroit où se trouverait l'enregistrement correspondant.

Regardons un exemple de requête :

SELECT color_shirt, color_pants 
FROM shirt
FULL  JOIN pants ON color_shirt=color_pants;

Notez que dans un FULL JOIN, le choix de la table de gauche et de celle de droite est négligeable. Le résultat sera le même.

Voici le résultat :

color_shirt color_pants
yellow NULL
green green
blue blue
NULL pink

Le jeu de résultats contient tous les enregistrements stockés dans la table "shirt" et dans la table "pants".

jointure complète

L'image montre que FULL JOIN a retourné tous les vêtements possibles : toutes les chemises et tous les pantalons. Les paires assorties (vert et bleu) sont affichées ensemble, et les éléments non assortis (chemise jaune et pantalon rose) sont affichés séparément.

Vous voulez en savoir plus sur les jointures externes ?

Il y a encore beaucoup à découvrir sur l'utilisation des OUTER JOIN. Pour en savoir plus, consultez le cours LearnSQL.fr SQL pour les débutants .