TNSI : Exercices sur le Langage SQL⚓︎
Exercice 1⚓︎
(d'après Prépabac NSI, Terminale, G.CONNAN, V.PETROV, G.ROZSAVOLGYI, L.SIGNAC, éditions HATIER.)
On veut créer une base de données baseHopital.db
qui contiendra les trois tables suivantes :
On suppose que les dates sont données sous la forme jj-mm-aaaa
.
Q1. Donner les commandes SQLite permettant de créer ces tables.
Correction
CREATE TABLE Patients(
id INTEGER PRIMARY KEY AUTOINCREMENT,
nom TEXT,
prenom TEXT,
genre TEXT,
annee_naissance INTEGER
);
CREATE TABLE Ordonnances(
code INTEGER PRIMARY KEY,
id_patient INTEGER,
matricule_medecin INTEGER,
date_ord TEXT,
medicaments INTEGER
);
CREATE TABLE Medecins(
matricule INTEGER PRIMARY KEY,
nom_prenom TEXT,
specialite TEXT,
telephone TEXT
);
Q2. Mme Anne Wizeunid, née en 2000 et demeurant 3 rue des Pignons Verts 12345 Avonelit doit être enregistrée comme patiente. Donner la commande SQLite correspondante.
Correction
INSERT INTO Patients VALUES (NULL, "Wizeunit", "Anne", "F", 2000);
Commentaire : NULL sert ici à ne rien mettre là où le SGBD gère tout seul la clé primaire en autoincrement. (hors-programme)
Q3. Le patient numéro 100 a changé de genre et est maintenant une femme. Donner la commande SQLite modifiant en conséquence ses données.
Correction
UPDATE Patients SET genre = 'F' WHERE id = 100 ;
Q4. Par souci d'économie, la direction décide de se passer des médecins spécialisés en épidémiologie. Donner la commande permettant de supprimer leurs fiches.
Correction
DELETE FROM Medecins WHERE specialite = "épidémiologie";
Q5. Donner la liste des patient(e)s ayant été examiné(e)s par un(e) psychiatre en avril 2020.
Correction
SELECT p.nom, p.prenom FROM Patients AS p
JOIN Ordonnances AS o ON p.id = o.id_patient
JOIN Medecins AS m ON o.matricule_medecin = m.matricule
WHERE m.specialite = "psychiatrie" AND o.date_ord LIKE "%04-2020%"
Exercice 2⚓︎
Questions interactives à réaliser sur le site sqlzoo.net
- Travail sur SELECT, (base de données Nobel) ici
Correction : voir https://github.com/jisaw/sqlzoo-solutions/blob/master/select-from-nobel.sql
- Travail sur SUM et COUNT, (base de données World) ici
Correction : voir https://github.com/jisaw/sqlzoo-solutions/blob/master/sum-and-count.sql
- Travail sur JOIN, (base de données Euro2012) ici
Correction : voir https://github.com/jisaw/sqlzoo-solutions/blob/master/join.sql
Exercice 3⚓︎
basé sur le travail de G.Viateau (Bayonne)
On considère ci-dessous le schéma de la base de données du stock d'un supermarché :
Q1. Quelle requête SQL donne le prix d'achat du produit dont le nom_court
est «Liq_Vaiss_1L» ?
Correction
SELECT prix_achat FROM Produits WHERE nom_court = 'Liq_Vaiss_1L'
Q2. Quelle requête donne l'adresse, le code postal et la ville du fournisseur dont le nom est «Avenir_confiseur» ?
Correction
SELECT adresse, cp, ville FROM Fournisseurs WHERE nom = 'Avenir_confiseur';
Q3. Quelle requête donne les produits étant en rupture de stock ?
Correction
SELECT Produits.nom FROM Produits
JOIN Stocks ON Produits.id = Stocks.produit
WHERE Stocks.quantite = 0;
Q4. Quelle requête donne la liste de toutes les ampoules vendues en magasin ? On pourra faire l'hypothèse que le nom du produit contient le mot «ampoule»
Correction
SELECT nom FROM Produits WHERE nom LIKE "%ampoule%";
Q5. Quelle requête permet d'avoir le prix moyen de ces ampoules ?
Correction
SELECT AVG(prix_vente) FROM Produits WHERE nom LIKE "%ampoule%";
Q6. Quelle requête permet d'identifier le produit le plus cher du magasin ?
Correction
SELECT nom_court FROM Produits ORDER BY prix_vente DESC LIMIT 1;
SELECT nom FROM Produits WHERE prix_vente = (SELECT MAX(prix_vente) FROM Produits);
Q7. Quelle requête renvoie les noms des produits dont la date de péremption est dépassée ? (on pourra utiliser la fonction SQL NOW()
qui renvoie la date actuelle )
Correction
SELECT p.nom FROM Produits AS p
JOIN Stocks AS s ON s.produits = p.id
WHERE s.date_peremption < NOW();
Exercice 4⚓︎
site réalisé par J. Le Coupanec (Académie de Rennes)
Sur la page http://colbert.bzh/sql/, suivez le parcours des deux TPs :
- TP1 : Gestion d'un réseau d'agences de location de voitures.
La base de données locations.db contient les tables
Agences
,Locations
,Vehicules
.
- TP2 : Le championnat de France 2015-2016
La base de données soccer.db contient les tables
Team
,Match
,Event
,Player
.