Construire une jointure interne ciblée
Objectif : Obtenir les emprunts associés à leurs adhérents et exemplaires avec une jointure interne.
Une requête qui affiche seulement les identifiants d’emprunt reste difficile à exploiter : vous ne savez pas immédiatement qui a emprunté quel exemplaire. Pour produire une liste utile, vous devez relier les tables concernées sans associer des lignes au hasard. Vous allez construire une jointure interne entre les emprunts, les adhérents et les exemplaires.
Relier chaque emprunt à ses références
Dans le schéma présenté dans la leçon « Lire le schéma relationnel de la médiathèque », la table emprunts porte les références vers l’adhérent et l’exemplaire concernés. Pour afficher leurs informations ensemble, vous partez de emprunts, puis vous reliez chaque ligne à la ligne correspondante dans adherents et exemplaires. Une jointure interne ne conserve que les lignes pour lesquelles la condition de correspondance est satisfaite.
Écrire les conditions avec ON
La forme INNER JOIN ... ON rend visible la table ajoutée et la règle qui la relie à la requête. Dans l’exemple suivant, e, a et x sont des alias : ils raccourcissent les références aux tables sans changer leur contenu. Chaque colonne est qualifiée par son alias, ce qui évite les ambiguïtés lorsque plusieurs tables possèdent une colonne appelée id.
/* Afficher les emprunts avec l'adhérent et l'exemplaire associés. */
SELECT
e.id AS emprunt_id,
a.id AS adherent_id,
a.nom AS nom_adherent,
x.id AS exemplaire_id,
e.date_emprunt
FROM emprunts AS e
INNER JOIN adherents AS a
ON e.adherent_id = a.id
INNER JOIN exemplaires AS x
ON e.exemplaire_id = x.id
ORDER BY e.date_emprunt, e.id;Chaque ligne retournée présente un emprunt, l’identifiant et le nom de l’adhérent correspondant, l’identifiant de l’exemplaire ainsi que la date de l’emprunt. L’ordre est déterminé par la date, puis par l’identifiant de l’emprunt.La première condition indique que e.adherent_id doit correspondre à a.id. La seconde associe e.exemplaire_id à x.id. Ces deux liens suivent le schéma de la médiathèque ; les relier tous deux à la table emprunts évite de croiser indépendamment les adhérents et les exemplaires.
Choisir les colonnes utiles
Une jointure sert à rendre accessibles les colonnes de plusieurs tables dans une même requête ; elle ne vous oblige pas à toutes les afficher. La liste située après SELECT définit le résultat et ses alias, comme nom_adherent ou exemplaire_id. Vous pouvez ajouter une colonne seulement si elle existe dans le schéma de référence ; ici, la requête utilise les identifiants et la date d’emprunt établis pour les tables concernées.
À retenir
- Utilisez INNER JOIN pour relier des lignes qui satisfont une condition de correspondance.
- Écrivez chaque correspondance de clés dans une clause ON explicite.
- Reliez chaque nouvelle table à la table concernée par la relation du schéma.
- Donnez des alias aux tables et qualifiez les colonnes pour rendre la requête lisible.
Dans la prochaine leçon, vous conserverez aussi des adhérents qui n’ont aucune ligne correspondante dans les emprunts.