Corrigé des exercices — SQL
Exercice 1 : Requêtes SELECT simples
-
Tous les livres de la table LIVRES.
-
Les titres et années de publication de tous les livres.
-
Les noms et prénoms de tous les auteurs.
-
Les titres des livres publiés après 1950.
-
Les titres des livres du genre "dystopie".
-
Les auteurs de nationalité française.
Exercice 2 : Filtres et conditions
-
Les livres publiés entre 1940 et 1960 (inclus).
-
Les livres ayant plus de 300 pages.
-
Les auteurs nés après 1900 et de nationalité américaine.
-
Les livres dont le titre contient le mot "Terre".
-
Les livres qui ne sont pas du genre "SF".
-
Les auteurs dont le prénom commence par la lettre "R".
Exercice 3 : Tri et limitation
-
Tous les livres triés par année de publication (du plus ancien au plus récent).
-
Les 5 livres les plus récents.
-
Les auteurs triés par année de naissance décroissante.
-
Les 3 livres ayant le plus de pages.
-
Les livres triés par genre, puis par titre alphabétique.
-
La liste des genres sans doublons.
Exercice 4 : Fonctions d'agrégation
-
Le nombre total de livres dans la base.
-
Le nombre de pages du livre le plus long.
-
L'année de publication du livre le plus ancien.
-
Le nombre moyen de pages des livres.
-
Le nombre de livres par genre.
Résultat : | genre | nb_livres | |-------|-----------| | aventure | 2 | | dystopie | 3 | | post-apo | 1 | | SF | 4 | | space opera | 2 | -
Le nombre total de pages de tous les livres de Jules Verne (id_auteur = 8).
Exercice 5 : GROUP BY et HAVING
-
Le nombre de livres écrits par chaque auteur.
-
Le nombre moyen de pages par genre.
-
Les genres ayant plus de 2 livres.
Résultat : dystopie (3), SF (4) -
Les auteurs ayant écrit au moins 2 livres.
Résultat : id_auteur 3, 5, 7, 8 (Asimov, Bradbury, Barjavel, Verne) -
L'année de publication du premier livre de chaque auteur.
-
Les genres dont la moyenne de pages dépasse 250.
Exercice 6 : Jointures
-
Les titres des livres avec le nom et prénom de leur auteur.
-
Les titres des livres écrits par des auteurs français.
Résultat : La nuit des temps, Ravage, De la Terre à la Lune, Vingt mille lieues sous les mers -
Les titres et auteurs des livres du genre "dystopie", triés par année.
-
Le nom des auteurs ayant écrit des livres de plus de 400 pages.
Résultat : Herbert Frank, Verne Jules -
Les livres avec le nom de l'auteur, pour les auteurs américains nés après 1910.
-
Pour chaque nationalité, le nombre de livres écrits.
Résultat : | nationalite | nb_livres | |-------------|-----------| | américain | 6 | | britannique | 2 | | français | 4 |
Exercice 7 : Requêtes complexes
-
Le titre du livre le plus long de chaque auteur, avec le nom de l'auteur.
-
Les auteurs n'ayant écrit qu'un seul livre.
-
Le nombre moyen de pages des livres par nationalité d'auteur.
-
Les genres pour lesquels tous les livres ont été publiés après 1940.
Résultat : dystopie (min 1931... non!), SF (min 1950), space opera (min 1951)
Note : En vérifiant les données, "Le meilleur des mondes" (dystopie) est de 1931, donc dystopie ne correspond pas. Les genres valides sont : SF, space opera, post-apo.
- Le nom complet des auteurs et le nombre total de pages qu'ils ont écrites.
Exercice 8 : INSERT, UPDATE, DELETE
-
Ajouter l'auteur Ursula K. Le Guin.
-
Ajouter le livre "La Main gauche de la nuit".
-
Changer le genre de "Dune" en "SF".
-
Augmenter de 10% le nombre de pages de tous les livres de Jules Verne.
-
Supprimer tous les livres publiés avant 1900.
Note : Cela supprimera "De la Terre à la Lune" (1865) et "Vingt mille lieues sous les mers" (1870).
Exercice 9 : Création de tables
-
Créer la table EMPRUNTS.
-
Créer la table EDITEURS.
-
Ajouter une colonne id_editeur à la table LIVRES.
Exercice 10 : Analyse de requêtes
- Requête avec sous-requête MIN : Explication : Cette requête retourne le titre du livre le plus ancien de la base. La sous-requête trouve l'année minimale, puis la requête principale sélectionne le(s) livre(s) publié(s) cette année-là.
Résultat : "De la Terre à la Lune" (1865)
- Requête complexe avec double sous-requête : Explication : Cette requête retourne le(s) auteur(s) ayant écrit le plus grand nombre de livres. La sous-requête interne compte les livres par auteur, la sous-requête externe trouve le maximum, et la requête principale affiche les auteurs atteignant ce maximum.
Résultat : Les auteurs avec 2 livres chacun (Asimov, Bradbury, Barjavel, Verne)
- Requête avec NOT IN : Explication : Cette requête retourne les genres pour lesquels AUCUN livre n'a été publié avant 1950. La sous-requête trouve les genres ayant au moins un livre avant 1950, puis la requête principale exclut ces genres.
Résultat : Les genres dont tous les livres sont de 1950 ou après (SF, space opera, potentiellement post-apo selon les données)
Exercice 11 : QCM
- Quelle clause permet de filtrer les résultats d'un GROUP BY ?
-
Réponse : c) HAVING
-
Quelle est la différence entre WHERE et HAVING ?
- Réponse : b) WHERE filtre avant GROUP BY, HAVING filtre après
Explication : WHERE filtre les lignes individuelles avant le regroupement. HAVING filtre les groupes après le regroupement et permet d'utiliser des fonctions d'agrégation.
- Que retourne
SELECT COUNT(*) FROM LIVRES WHERE 1=0;? - Réponse : c) 0
Explication : La condition 1=0 est toujours fausse, donc aucune ligne n'est sélectionnée. COUNT(*) sur un ensemble vide retourne 0 (pas NULL, pas d'erreur).
- Quel type de jointure retourne tous les enregistrements de la table de gauche ?
- Réponse : b) LEFT JOIN
Explication : LEFT JOIN retourne toutes les lignes de la table de gauche, même si elles n'ont pas de correspondance dans la table de droite (avec NULL pour les colonnes de droite).
- Quelle fonction d'agrégation ignore les valeurs NULL ?
- Réponse : b) COUNT(colonne)
Explication : COUNT(*) compte toutes les lignes, y compris celles avec des NULL. COUNT(colonne) ne compte que les valeurs non NULL de cette colonne.
Auteur : Florian Mathieu
Licence CC BY NC
Ce cours est mis à disposition selon les termes de la Licence Creative Commons Attribution - Pas d'Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International.