© Éditions Eyrolles
123
chapitre n° 4
Interrogation des données
Types de jointures
Bien que, dans le vocabulaire courant, on ne parle que de « jointures » en fonction de la nature
de l’opérateur utilisé dans la requête, de la clause de jointure et des tables concernées, on
distingue :
q
Les jointures internes (inner joins) :
– L’équijointure (equi join) est la plus connue, elle utilise l’opérateur d’égalité dans la
clause de jointure. La jointure naturelle est conditionnée en plus par le nom des colonnes. La non équijointure utilise l’opérateur d’inégalité dans la clause de jointure.
– L’autojointure (self join) est un cas particulier de l’équijointure, qui met en œuvre deux
fois la même table (des alias de tables permettront de distinguer les enregistrements
entre eux).
q
La jointure externe (outer join), la plus compliquée, qui favorise une table (dite
« dominante ») par rapport à l’autre (dite « subordonnée »). Les lignes de la table dominante sont retournées même si elles ne satisfont pas aux conditions de jointure.
Le tableau suivant illustre cette classification sous la forme de quelques conditions appliquées
à notre exemple :
Pour mettre trois tables T1, T2 et T3 en jointure, il faut utiliser deux clauses de jointures (une
entre T1 et T2 et l’autre entre T2 et T3). Pour n tables, il faut n-1 clauses de jointures. Si vous
oubliez une clause de jointure, un produit cartésien restreint est généré.
Étudions à présent chaque type de jointure avec les syntaxes « relationnelle » et « SQL2 ».
Équijointure
Une équijointure utilise l’opérateur d’égalité dans la clause de jointure et compare généralement des clés primaires avec des clés étrangères.
En considérant les tables suivantes, les équijointures se programment soit sur les colonnes
comp et compa soit sur les colonnes brevet et chefPil. Extrayons par exemple :
Tableau 4-34 Exemples de conditions
Type de jointure
Syntaxe de la condition
Équijointure
…WHERE comp
compa;
Autojointure
…WHERE
.chefPil =
.brevet;
Jointure externe
…FROM Compagnie
Pilote ON comp = compa;
=
alias1
alias2
LEFT OUTER JOIN
Précédent

- 145/418

Suivant