Les jointures oubliées


Les jointures représentent des relations entres les tables (ou même vues) d’une base de données (ou même plusieurs bases de données). Elles sont utilisées essentiellement pour optimiser les interrogations en raffinant les résultats.

Les jointures sont de plusieurs types : inner join, left join, right join, jointure externe … sur cet article je reviens essentiellement sur deux types que je qualifie par « jointures oubliées » vu que beaucoup de personnes les oublient (même des DBA) et qui sont les jointures gauche et droite. Mais avant tout il sera intéressant de revenir sur les jointures équivalentes afin de voir la différence entre les résultats des différentes requêtes.

Pour commencer voici une représentation de la base de données qu’on va utiliser durant cet article.

Le script des tables de la base est disponible ici.

INNER JOIN

Représente la jointure par défaut entre les tables, je dirais aussi la plus utilisée. Inner join donne un résultat qui représente les enregistrements de chaque table reliées par la condition de jointure.

Exemple :

SELECT * FROM emp INNER JOIN dept ON emp.deptId=dept.deptId;

Résultat :

Remarque :
La même requête peut s’écrire de la manière suivante :

SELECT * FROM emp, dept WHERE emp.deptId=dept.deptId;

LEFT JOIN

Le résultat d’une jointure Left join entre deux tables A et B représente tous les enregistrements de la table A (gauche), même si la condition de jointure ne trouve aucune correspondance dans la table B. Les colonnes de la table B seront représentées par des valeurs nulles.

Exemple :

SELECT * FROM emp LEFT JOIN dept ON emp.deptId=dept.deptId;

Résultat :

RIGHT JOIN

Ressemble à left join sauf que les rôles sont inversés, donc le résultat d’une jointure right join entre deux tables A et B représente tous les enregistrements de la table B (droite), même si la condition de jointure ne trouve aucune correspondance dans la table A. Les colonnes de la table A seront représentées par des valeurs nulles.

Exemple :

SELECT * FROM emp RIGHT JOIN dept ON emp.deptId=dept.deptId;

Résultat :

A propos de l'auteur

Faut il vraiment porter des lunettes, pour travailler la nuit, sur un terminal vert sur noire, pour être Geek pour devenir root ?