Exercices Progressifs SQL
Contexte : La Bibliothèque
Vous gérez une petite base de données d'une bibliothèque contenant une seule table Livres.
| id | titre | auteur | annee_publication | genre | disponible |
|---|---|---|---|---|---|
| 1 | 1984 | George Orwell | 1949 | SF | 1 |
| 2 | Le Petit Prince | Antoine de Saint-Exupéry | 1943 | Conte | 0 |
| 3 | Dune | Frank Herbert | 1965 | SF | 1 |
| 4 | Les Misérables | Victor Hugo | 1862 | Roman | 1 |
| 5 | Fondation | Isaac Asimov | 1951 | SF | 0 |
(Note : `disponible` est un booléen : 1 = Oui, 0 = Non)
📥 Télécharger la base (bibliotheque.sql)1. Tout voir
Écrire la requête pour afficher toutes les colonnes de tous les livres.
2. Titres uniquement
Afficher uniquement le titre et l'auteur de tous les livres.
3. Science-Fiction
Afficher les titres des livres du genre 'SF'.
4. Disponibles
Afficher les titres des livres qui sont actuellement disponibles (disponible = 1).
5. Après 1950
Afficher les livres publiés strictement après l'année 1950.
6. Auteurs précis
Afficher les livres écrits par 'George Orwell' OU 'Isaac Asimov'.
Contexte : La Concession Automobile
Vous analysez le stock d'une concession automobile.
| id | marque | modele | couleur | annee | prix | kilométrage |
|---|---|---|---|---|---|---|
| 1 | Renault | Clio | Rouge | 2018 | 12000 | 45000 |
| 2 | Peugeot | 208 | Blanc | 2020 | 15000 | 20000 |
| 3 | Tesla | Model 3 | Noir | 2022 | 35000 | 10000 |
| 4 | Renault | Mégane | Bleu | 2015 | 8000 | 120000 |
| 5 | Porsche | 911 | Gris | 2019 | 95000 | 15000 |
CREATE TABLE IF NOT EXISTS Voitures ( id INTEGER PRIMARY KEY, marque TEXT, modele TEXT, couleur TEXT, annee INTEGER, prix INTEGER, kilometrage INTEGER ); -- Insertion des données INSERT INTO Voitures (id, marque, modele, couleur, annee, prix, kilometrage) VALUES (1, 'Renault', 'Clio', 'Rouge', 2018, 12000, 45000), (2, 'Peugeot', '208', 'Blanc', 2020, 15000, 20000), (3, 'Tesla', 'Model 3', 'Noir', 2022, 35000, 10000), (4, 'Renault', 'Mégane', 'Bleu', 2015, 8000, 120000), (5, 'Porsche', '911', 'Gris', 2019, 95000, 15000);
1. Catalogue trié
Afficher toutes les voitures triées par prix croissant (du moins cher au plus cher).
2. Les Renault
Afficher le modèle et le prix de toutes les voitures de marque 'Renault'.
3. Voitures récentes et abordables
Afficher les voitures fabriquées après 2017 (inclus) ET dont le prix est inférieur à 20 000 €.
4. Couleurs disponibles
Afficher la liste des différentes couleurs disponibles en stock, sans doublons.
5. Le kilométrage
Afficher les voitures ayant moins de 50 000 km, triées par kilométrage croissant.
6. Recherche spécifique
Afficher les voitures qui ne sont PAS de couleur 'Blanc'.
Contexte : Le Refuge des Renards
Vous gérez un refuge pour renards. Les données sont réparties sur trois tables.
TableSoignants
| id | nom | specialite |
|---|---|---|
| 1 | Dr. Dolittle | Vétérinaire |
| 2 | Mme. Pomfrey | Infirmière |
| 3 | Hagrid | Gardien |
Renards
| id | nom | sexe | age | id_enclos | id_soignant |
|---|---|---|---|---|---|
| 1 | Rusty | M | 3 | 1 | 1 |
| 2 | Vixey | F | 2 | 1 | 2 |
| 3 | Zorro | M | 5 | 2 | 1 |
| 4 | Luna | F | 1 | 3 | 3 |
| 5 | Shadow | M | 4 | NULL | 2 |
Enclos
| id | nom_enclos | surface_m2 | type_sol |
|---|---|---|---|
| 1 | La Forêt | 500 | Terre |
| 2 | La Plaine | 300 | Herbe |
| 3 | La Tanière | 50 | Sable |
CREATE TABLE IF NOT EXISTS Enclos ( id INTEGER PRIMARY KEY, nom_enclos TEXT, surface_m2 INTEGER, type_sol TEXT ); -- Insertion des données Enclos INSERT INTO Enclos (id, nom_enclos, surface_m2, type_sol) VALUES (1, 'La Forêt', 500, 'Terre'), (2, 'La Plaine', 300, 'Herbe'), (3, 'La Tanière', 50, 'Sable'); -- Création de la table Renards CREATE TABLE IF NOT EXISTS Renards ( id INTEGER PRIMARY KEY, nom TEXT, sexe TEXT, age INTEGER, id_enclos INTEGER, FOREIGN KEY (id_enclos) REFERENCES Enclos(id) ); -- Insertion des données Renards INSERT INTO Renards (id, nom, sexe, age, id_enclos) VALUES (1, 'Rusty', 'M', 3, 1), (2, 'Vixey', 'F', 2, 1), (3, 'Zorro', 'M', 5, 2), (4, 'Luna', 'F', 1, 3), (5, 'Shadow', 'M', 4, NULL);
1. Qui est où ?
Afficher le nom du renard et le nom de l'enclos dans lequel il se trouve (nécessite une jointure).
2. Les grands espaces
Afficher les noms des renards qui vivent dans un enclos de plus de 200 m².
3. Les mâles de la Forêt
Afficher les renards mâles ('M') qui sont dans l'enclos nommé 'La Forêt'.
4. L'âge des pensionnaires
Afficher la liste des renards et de leur enclos, triée par âge du renard (du plus vieux au plus jeune).
5. Sans domicile
Afficher les renards qui ne sont affectés à aucun enclos (id_enclos est NULL).
6. Inventaire
Afficher le nom de l'enclos et la surface pour tous les enclos qui ont un sol de type 'Herbe' ou 'Terre'.