Aller au contenu principal

Requêtes avec jointures

Petite vérification

Avant de commencer, vérifiez si vous savez...

  1. sur les tables livre et genre (liées par T1.id_genre = T2.id), expliquer ce que retourne la requête SELECT * FROM livre AS T1 LEFT JOIN genre AS T2 ON T1.id_genre = T2.id WHERE T1.id_genre IS NULL;
  2. calculer combien de lignes retournerait un CROSS JOIN entre une table de 30 lignes et une table de 40 lignes, et vérifier que vous obtenez bien 1200 lignes
  3. citer le mot-clé SQL qui permet de simuler un FULL JOIN sous MariaDB/MySQL en combinant LEFT JOIN et RIGHT JOIN
📌 Réponse attendue

Nous allons utiliser la base de données « bibliotheque »

remarque

Si vous n'avez pas créé la base de données « bibliotheque » veuillez consulter le tutoriel Premières requêtes

Écrire des requêtes SQL pour répondre aux questions que se pose la documentaliste.

Voici le MCD

MCD_bibliotheque.png

A partir du schéma « Modèle Conceptuel de Données » MCD représenté ci-dessus, écrire les requêtes SQL pour répondre aux questions suivantes.

Télécharger le MCD

Voici le MLD au format texte

  • AUTEURS (idauteur, nom, prenom, datenaiss, datedeces, bibliographie, #idlivre)
  • EDITEURS (idediteur, nom, adresse, code, ville, pays, telephone, fax, #idlivre)
  • EMPRUNTEURS (idemprunteur, nom, prenom, adresse, code, ville, telephone, sexe, datenaiss, nbretards)
  • EMPRUNTS (idemprunt, datepret, daterendu, #idlivre, #idemprunteur)
  • LIVRES (idlivre, isbn, titre, nbpages, dateparu, prix, theme, format)

Voici le MLD sous forme d'un schéma

MLD_bibliotheque.png


1. Comment afficher les titres des livres avec les prénoms et noms de leurs auteurs ?


Bonne pratique - Toujours préfixer les colonnes du nom de leur table

Quand on fait des JOIN, deux tables peuvent avoir des colonnes portant le même nom (ex. nom dans auteurs et editeurs). Préfixez toujours : auteurs.nom, editeurs.nom. Sans préfixe, SQL retourne une erreur d'ambiguïté et vous ne savez plus quelle colonne est affichée.



2. Comment afficher les titres des livres avec les prénoms et noms de leurs auteurs et le nom de l'éditeur ?



3. Comment afficher les titres des livres avec les prénoms et noms de leurs emprunteurs ?



4. Comment afficher les titres des livres avec auteurs, éditeur et emprunteurs ?



5. Comment afficher la liste des emprunteurs (nom et prénom) qui ont emprunté des livres après le 1er Octobre 2019 ?



6. Comment afficher la liste des livres (titre) qui n'ont jamais été empruntés ?


Bonne pratique - LEFT JOIN + IS NULL pour trouver les absences

Le pattern LEFT JOIN ... WHERE table_droite.colonne IS NULL est la façon standard de trouver les enregistrements sans correspondance (livres jamais empruntés, clients sans commandes...). INNER JOIN ne retourne que les correspondances ; seul LEFT JOIN garde les lignes sans match, que IS NULL permet alors d'identifier.

📌 Une solution