Nous avons vu dans les chapitres précédents comment obtenir des données provenant d’une seule table. Nous allons voir maintenant comment formuler des requêtes SQL pour obtenir des données provenant de plusieurs tables grâce au concept de jointure. Une jointure entre deux tables est possible s’il existe une association entre-elles.

Database schema

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

1. Jointure simple

Supposons que nous aimerions obtenir les données à propos des employés travaillant dans le département de Marketing. On désire obtenir les données à propos des nom, prénom et département de chaque employé.

SELECT emp.First_name AS Prenom, emp.Last_name AS Nom, dep.Name AS Departement
FROM Employee AS emp, Department AS dep
WHERE emp.Department_id = dep.ID AND dep.Name = 'Marketing'

On obtient le tableau suivant.

{{h}}
{{r}}

Nous allons expliciter comment fonctionne la jointure. A l’intérieur du WHERE nous avons déclaré la jointure avec le code suivant : emp.Department_id = dep.ID. SQL agrège (ou réunit si vous préférez) les données des deux tables pour ne former qu’une seule table. La jointure se fait donc grâce à la clé étrangère Department_id de la table Employee qui fait référence à la clé primaire de la table Department. Enfin, à cause de la condition dep.Name = 'Marketing', seuls les enregistrements de la table agrégée qui satisfont à cette condition sont extraits. La Figure 6.2 résume ce qui précède.

SQL join clause

Figure 6.2 : construction d’une jointure SQL

2. Jointure multiple

Les jointures multiples se font exactement de la même manière que les jointures simples en ajoutant AND entre les différentes jointures.

Supposons que nous aimerions obtenir les données à propos des projets de l’entreprise et les nom et prénom des employés participant à chacun des projets. Ici trois tables sont concernées à savoir Employee, Project et Involvement.

SELECT proj.Name AS Projet, emp.Last_name AS Nom, emp.First_name AS Prenom
FROM Employee AS emp, Involvement AS inv, Project AS proj
WHERE inv.Project_id = proj.ID AND inv.Employee_id = emp.ID

On obtient le tableau suivant.

{{h}}
{{r}}

La Figure 6.3 illustre la construction de la jointure multiple ci-dessus.

SQL join clause

Figure 6.3 : construction d’une jointure multiple SQL

Récap

Une jointure est nécessaire lorsque l’on veut obtenir des données provenant de plusieurs tables différentes et il est alors nécessaire de préfixer le nom des tables avant chaque attribut (p.ex. Project.ID). Il se peut en effet que certaines tables aient un attribut qui porte le même nom (p.ex. ID). Vous remarquerez qu’on a utilisé des alias dans les exemples ci-dessus afin d’avoir des noms de tables plus facile à manipuler.

Il existe une autre syntaxe pour écrire des jointures en SQL. Voici une façon équivalente d’écrire le premier exemple avec la syntaxe INNER JOIN.

SELECT emp.First_name AS Prenom, emp.Last_name AS Nom, dep.Name AS Departement
FROM Employee AS emp
INNER JOIN Department AS dep ON emp.Department_id = dep.ID
WHERE dep.Name = 'Marketing'