Jointures

Une jointure est le processus qui consiste à combiner les données de deux tables ou plus en fonction d'un domaine d'informations commun. Les lignes d'une table sont appariées avec les lignes d'une autre table lorsque les informations des lignes correspondantes correspondent en fonction du critère de jointure (le prédicat de jointure).

Par exemple, prenez en compte les deux tableaux suivants:
TABLE1 TABLE2
PROJ ID_PROJ ID_PROJ Nom
A 1 1 Sam
B 2 3 Joe
C 3 4 Mary
D 4 1 JACQUES
2 Mike
Pour joindre TABLE1 et TABLE2, de sorte que les colonnes PROJ_ID aient les mêmes valeurs, utilisez l'instruction SQL suivante:
   select proj, x.proj_id, name
     from table1 x, table2 y
     where x.proj_id = y.proj_id
Dans ce cas, le prédicat de jointure approprié est: where x.proj_id = y.proj_id.
La requête génère l'ensemble de résultats suivant:
PROJ ID_PROJ Nom
A 1 Sam
A 1 JACQUES
B 2 Mike
C 3 Joe
D 4 Mary
En fonction de la nature des prédicats de jointure, ainsi que des coûts déterminés sur la base des statistiques de table et d'index, l'optimiseur choisit l'une des méthodes de jointure suivantes:
  • Jointure en boucle imbriquée
  • Jointure par fusion
  • Jointure par hachage

Lorsque deux tables sont jointes, une table est sélectionnée comme table externe et l'autre table est considérée comme la table interne de la jointure. La table externe est accessible en premier et n'est analysée qu'une seule fois. Le fait que la table interne soit analysée plusieurs fois dépend du type de jointure et des index disponibles. Même si une requête joint plus de deux tables, l'optimiseur ne joint que deux tables à la fois. Si nécessaire, des tables temporaires sont créées pour contenir les résultats intermédiaires.

Vous pouvez fournir des opérateurs de jointure explicites, tels que INNER ou LEFT OUTER JOIN, pour déterminer comment les tables sont utilisées dans la jointure. Toutefois, avant de modifier une requête de cette manière, vous devez permettre à l'optimiseur de déterminer comment joindre les tables, puis d'analyser les performances de la requête pour décider d'ajouter ou non des opérateurs de jointure.