Skip to content

Jointures : profil des emprunteurs et détection des inactifs

La catégorie BD s’est démarquée dans la leçon précédente. Pour dresser le profil de ses emprunteurs, il faut chaîner deux jointures à travers les trois tables : empruntsdocuments (pour filtrer sur la catégorie) et empruntsadherents (pour connaître qui a emprunté).

query("""
SELECT a.prenom, a.nom, a.ville, COUNT(*) AS nb_bd
FROM emprunts e
JOIN documents d ON d.id = e.document_id
JOIN adherents a ON a.id = e.adherent_id
WHERE d.categorie = 'bd'
GROUP BY a.id
ORDER BY nb_bd DESC
""")
prenom nom ville nb_bd
0 Amelie Rousseau Nantes 2
1 Nora Benali Nantes 1
2 Sarah Lemoine Nantes 1
3 Thomas Girard Rennes 1
4 Youssef Amrani Nantes 1
5 Chloe Petit Rennes 1
6 Karim Belkacem Nantes 1

INNER JOIN (souvent écrit simplement JOIN) ne garde que les lignes qui trouvent une correspondance dans les deux tables. C’est le bon choix ici : on ne s’intéresse qu’aux adhérents ayant réellement emprunté une BD.

LEFT JOIN : repérer ce qui n’existe pas

Section titled “LEFT JOIN : repérer ce qui n’existe pas”

La question inverse — quels adhérents inscrits n’ont jamais emprunté ? — ne peut pas se résoudre avec un INNER JOIN, puisque justement, aucune ligne d’emprunt ne correspond à ces adhérents. Il faut un LEFT JOIN, qui conserve toutes les lignes de la table de gauche même sans correspondance, puis un test IS NULL pour isoler les cas où la jointure n’a rien trouvé :

query("""
SELECT a.prenom, a.nom
FROM adherents a
LEFT JOIN emprunts e ON e.adherent_id = a.id
WHERE e.id IS NULL
""")
prenom nom
0 Hugo Bernard
1 Paul Simon
2 Victor Lefebvre

Ce motif — LEFT JOIN + WHERE ... IS NULL — porte un nom : une anti-jointure. C’est la façon standard en SQL de répondre à une question du type « quels éléments de A n’ont aucune correspondance dans B ». On le retrouvera par exemple dans le module Séries temporelles pour repérer des jours sans aucune vente enregistrée.

Ces trois adhérents (Hugo, Paul, Victor) sont inscrits mais n’ont jamais emprunté : ce sont eux qu’il faudrait recontacter en priorité, plutôt que d’inviter uniquement les habitués à une soirée qui ne leur apprendra rien de nouveau.

👉 Synthèse : identifier les adhérents fidèles et restituer la recommandation


Junior TSAFACK – 12/09/2026