Aller au contenu principal

Requêtes pour le CDI (2)


1. Comment afficher les titres des livres qui n'ont jamais été empruntés ?


Bonne pratique - NOT IN vs LEFT JOIN IS NULL pour les absences

Deux patterns existent pour trouver les livres jamais empruntés :

-- Avec NOT IN (sous-requête)
WHERE idlivre NOT IN (SELECT idlivre FROM emprunts)

-- Avec LEFT JOIN IS NULL
LEFT JOIN emprunts ON livres.idlivre = emprunts.idlivre
WHERE emprunts.idlivre IS NULL

NOT IN est plus lisible sur de petites tables. LEFT JOIN IS NULL est plus performant sur de grandes tables et gère mieux les valeurs NULL dans la sous-requête.


2. Comment afficher les emprunteurs qui ont plus de 1 retard, avec prénom, nom et nombre de retards ?


3. Comment afficher la liste des emprunts en cours (daterendu est NULL), avec titre du livre, prénom et nom de l'emprunteur ?


4. Comment afficher les éditeurs situés à Paris (codepostal commence par 75), avec nom et adresse ?


5. Comment afficher les livres publiés en 2000, avec titre et nom de l'auteur ?


Bonne pratique - Extraire des parties de dates avec YEAR(), MONTH(), DAY()

YEAR(dateparu) = 2000 est plus lisible que dateparu BETWEEN '2000-01-01' AND '2000-12-31'. MySQL propose YEAR(), MONTH(), DAY(), HOUR(), MINUTE() pour extraire une partie d'une date. Utiliser YEAR() plutôt qu'un BETWEEN évite les erreurs sur les derniers jours du mois.


6. Comment afficher les titres des livres empruntés par des emprunteurs de plus de 18 ans (basé sur datenaissance) ?


7. Comment afficher le nombre de livres par éditeur, avec le nom de l'éditeur ?


8. Comment afficher les auteurs qui ont écrit plus de 2 livres, avec prénom, nom et nombre de livres ?


Bonne pratique - GROUP BY sur la cle primaire plutot que sur le nom

GROUP BY auteurs.idauteur garantit un groupe par auteur, même si deux auteurs ont le même nom. GROUP BY auteurs.nom regrouperait ensemble des homonymes. Règle : groupez toujours par la clé primaire, affichez le nom dans le SELECT. HAVING filtre les groupes après agrégation ; WHERE COUNT(...) est une erreur SQL.


9. Comment afficher le prix moyen des livres par thème ?


10. Comment afficher le nombre total de pages de tous les livres ?

Une solution