Pour rappel, la jointure lie les enregistrements dont la valeur de la clé étrangère correspond (matching) à la valeur de la clé primaire d’une autre table. Parfois nous avons besoin d’avoir un ensemble de données exhaustif (complet) et pas seulement lorsqu’il existe une correspondance. C’est là qu’interviennent les jointures externes.
1. Jointure externe
Supposons que nous aimerions avoir les données concernant les projets et les employés qui y participent. Dans ce cas, nous aimerions avoir les données exhaustives par rapport aux employés, à savoir aussi les employés qui ne participent à aucun projets.
SELECT emp.First_name, emp.Last_name, inv.Employee_id, inv.Project_id
FROM Employee AS emp
LEFT JOIN Involvement AS inv ON emp.ID = inv.Employee_id
On obtient le tableau suivant.
{{h}} |
---|
{{r}} |
2. Quantification
Supposons que nous aimerions quantifier pour tous les employés, le nombre de projets auxquels ils participent.
SELECT emp.First_name, emp.Last_name, COUNT( inv.Employee_id ) AS NbOfProjects
FROM Employee AS emp
LEFT JOIN Involvement AS inv ON emp.ID = inv.Employee_id
GROUP BY inv.Employee_id
On obtient le tableau suivant.
{{h}} |
---|
{{r}} |
3. Illustration
La Figure 1.2 montre que la jointure normale réunit les données qui ont une correspondance dans les deux tables. La Figure 1.3 montre que la jointure externe comprend en plus de cela les données de la table (ici celle de gauche) qui n’ont pas de correspondance avec l’autre table.
4. Jointure externe à droite
La jointure externe à droite est le même concept que la jointure externe à gauche. Pour illustrer ceci, écrivons le premier exemple ci-dessus avec une jointure externe à droite.
SELECT emp.First_name, emp.Last_name, inv.Employee_id, inv.Project_id
FROM Involvement AS inv
RIGHT JOIN Employee AS emp ON emp.ID = inv.Employee_id
On obtient le tableau suivant.
{{h}} |
---|
{{r}} |
Récap
Les jointures externes peuvent être utilisées pour agréger les données de deux tables même pour les cas où les clés respectives n’ont pas de correspondance.
Par exemple, on désire obtenir les données à propos des employés et les projets dans lesquels ils sont impliqués mais aussi les employés qui ne sont impliqués dans aucun projets.