Dans ce chapitre, nous allons voir comment faire des jointures entre une table et cette table elle-même, ce qui est connu sous le nom d’auto-jointure. Nous allons l’aborder dans le cas spécifique de l’association récursive. Comme nous allons le voir ce type d’association décrit une dépendance entre les données.

Association récursive

Figure 2.1 : schéma de base de données

1. Niveau zéro

Supposons que nous aimerions obtenir les données à propos du big boss de l’entreprise, à savoir l’employé qui n’a pas de boss !

SELECT First_name, Last_name
FROM Worker
WHERE Boss_id IS NULL

On obtient le tableau suivant.

{{h}}
{{r}}

2. Premier niveau

Supposons que nous aimerions obtenir les données à propos des employés dont le chef direct est Eddy Fisher (on pourrait aussi utiliser une sous-requête pour faire ça).

SELECT W2.First_name, W2.Last_name, W1.Last_name AS DirectBoss
FROM Worker AS W1, Worker AS W2
WHERE W2.Boss_id = W1.ID
      AND W1.First_name = 'Eddy' AND W1.Last_name ='Fisher'

On obtient le tableau suivant.

{{h}}
{{r}}

3. Second niveau

Supposons que nous aimerions obtenir les données des employés dont le chef est subordonné à Eddy Fisher. Autrement dit, les employés du deuxième niveau dans la hiérarchie.

SELECT W3.First_name, W3.Last_name, W2.Last_name AS DirectBoss
FROM Worker AS W1, Worker AS W2, Worker AS W3
WHERE W3.Boss_id = W2.ID
      AND W2.Boss_id = W1.ID
      AND W1.First_name = 'Eddy' AND W1.Last_name ='Fisher' 

On obtient le tableau suivant.

{{h}}
{{r}}

Récap

Les associations récursives modélisent une hiérarchie des données. Cette hiérarchie peut être structurelle (comme on l’a vu ici) ou temporelle (e.g. ordonnancement de tâches).

La jointure se fait de la même manière que la jointure normale sauf qu’en plus on a besoin des alias puisqu’on traite avec la même table !