Les jointures
SQL - Requêtes avec JOIN
mysql -h etudiants.joliciel.org -u etudiant -p
use biblio;
Mot de passe d'accès au serveur SQL
Vous devez être connecté pour voir le contenu.
Notions théoriques
Qu'est ce qu'une jointure SQL ?
Une jointure permet de créer une liaison entre 2 ou plusieurs tables pour pouvoir récupérer un résultat bien précis.
La jointure des tables se fait avec des requêtes SQL.
La seule chose pour que les jointures fonctionnent correctement est d’avoir des valeurs uniques (des identifiants) sur chacune des tables à lier.
Ces identifiants sont les clés primaires et les clés étrangères.
Exemple pratique
Prenons l’exemple de la gestion d'une bibliothèque avec des livres qui appartiennent à un genre de livre.
- Cette base de données est composée de 2 tables :
- la table T1 contient la liste des livres ;
- la table T2 contient la liste des genres de livre.
Nous voyons dans ce MPD que la table T1 (livre) mémorise l’identifiant du genre de livres dans un champ (clé étrangère) nommée "id_genre" qui fait référence au champ "id" (clé primaire) de la table T2 (genre de livre).
Qu'est-ce qu'un MPD ?
Un MPD (Modèle Physique de Données) est la représentation des données d'un système d'information.
Lors de la modélisation d'une base de données avec MERISE, le MPD est la dernière étape.
La représentation des données est réalisée en langage SQL.
Lier des tables sans le mot clé JOIN
Il est possible de lier 2 tables dans une requête SQL sans utiliser explicitement le mot clé JOIN
.
Pour cela, il suffit d'utiliser une condition dans la clause
WHERE
qui compare les colonnes de liaison des deux tables.
Lier 2 tables dans une requête SQL sans utiliser explicitement le mot clé JOIN
est appelée une "ancienne" jointure (old-style join)
ou une jointure implicite.
Liste de tous les livres avec leur genre
Nous souhaitons obtenir une liste de tous les livres avec leur genre.
Voici une requête possible (sans le mot clé JOIN
) :
SELECT livre.titre, genre.libelle
FROM livre, genre WHERE livre.id_genre = genre.id;
Cette requête compare l'id du genre pour chaque livre avec l'id du genre dans la table genre.
L'utilisation de JOIN
est préférable pour plusieurs raisons :
JOIN
permet de séparer les critères de liaison et de filtrage, ce qui peut rendre la requête plus claire.JOIN
est plus flexible car il permet d'effectuer différents types de jointures (INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN) qui ne peuvent pas être réalisées aussi facilement avec la méthodeWHERE
.
Lier des tables avec le mot clé JOIN
Liste de tous les livres avec leur genre
Nous souhaitons obtenir une liste de tous les livres avec leur genre.
Voici une autre requête possible (avec le mot clé JOIN
) :
SELECT livre.titre, genre.libelle
FROM livre JOIN genre ON livre.id_genre = genre.id;
Pour obtenir la 2ème requête, nous avons remplacé dans la 1ère requête :
FROMparJOIN
WHEREparON
Différences d'une requête sans/avec JOIN
- sans
JOIN
:SELECT livre.titre, genre.libelle
FROM livre, genre WHERE livre.id_genre = genre.id; - avec
JOIN
:SELECT livre.titre, genre.libelle
FROM livre JOIN genre ON livre.id_genre = genre.id;
Les principaux types de jointure
Les 4 principaux types de jointure sont :
Nous allons maintenant étudier comment lier des tables avec le mot clé
JOIN
.