Exercices de SQL Ă©crits
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 :
Patients | |
---|---|
id | Int |
nom | Text |
prenom | Text |
genre | Text |
annee_naissance | Int |
Ordonnances | |
---|---|
code | Int |
id_patient | Int |
matricule_medecin | Int |
date_ord | Text |
medicaments | Text |
Medecins | |
---|---|
matricule | Int |
nom_prenom | Text |
specialite | Text |
telephone | Text |
On suppose que les dates sont données sous la forme jj-mm-aaaa
.
On donne le diagramme relationnel de cette base :
Q0. Ăcrire le schĂ©ma relationnel de la table Ordonnances. On soulignera les clĂ©s primaires et marquera d'un # les clĂ©s Ă©trangĂšres.
Solution
Ordonnaces (code : Int, #id_patient : Int, #matricule_medecin : Int, date_ord : Text, medicaments : Text)
Q1. (Hors programe BAC) Donner les commandes SQL permettant de créer ces tables.
Solution
CREATE TABLE Patients(
id INTEGER PRIMARY KEY,
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 TEXT,
FOREIGN KEY(id_patient) REFERENCES Patients(Id),
FOREIGN KEY(matricule_medecin) REFERENCES Medecins(matricule)
);
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 numĂ©ro 1. Donner la commande SQLite correspondante.
Q3. Le patient numéro 100 a changé de prénom et s'appelle maintenant "Alice". Donner la commande SQLite modifiant en conséquence ses données.
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.
Q5. Donner la liste des patient(e)s ayant été examiné(e)s par un(e) psychiatre en avril 2020.
Exercice 2
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» ?
Q2. Quelle requĂȘte donne l'adresse, le code postal et la ville du fournisseur dont le nom est «Avenir_confiseur» ?
Q3. Quelle requĂȘte donne les produits Ă©tant en rupture de stock ?
Solution
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»
Q5. Quelle requĂȘte permet d'avoir le prix moyen de ces ampoules ?
Q6. Quelle requĂȘte permet d'identifier le produit le plus cher du magasin ?
Solution
ouQ7. 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 )
Exercice 3
Exercice 1 du sujet Amérique du Sud J1 2022
Solution
Correction Q1.a.
La relation Sport a pour clé primaire le couple NomSport et nomStation, et pour clé étrangÚre l'attribut nomStation, clé primaire de la relation Station.
Correction Q1.b.
-
Contrainte d'intĂ©gritĂ© de domaine : l'attribut Prix doit ĂȘtre un nombre entier.
-
Contrainte d'intégrité de relation : le couple (nomSport, nomStation) ne peut pas se retrouver deux fois dans la table (car il forme une clé primaire)
-
Contrainte d'intĂ©gritĂ© de rĂ©fĂ©rence : l'attribut nomStation ne peut pas ĂȘtre un nom n'apparaissant pas dans la relation Station.
Correction Q2.a.
La commande INSERT ne sert que pour insérer de nouveaux enregistrements, or le couple ("planche à voile" , "La tramontane catalane") existe déjà dans la relation (et c'est une clé primaire donc on ne peut pas la retrouver deux fois). Il faut donc utiliser :
Correction Q2.b.
Correction Q4.a.
Exercice 4
Exercice 4 du sujet Centres Ătrangers J1 2022
Solution
Correction Q1.a.
L'attribut id_mesure
semble une clé primaire acceptable car elle semble spécifique à chaque enregistrement.
Correction Q1.b.
L'attribut id_centres
semble ĂȘtre une clĂ© primaire de la relation Centres
. On le retrouve aussi (sous le mĂȘme nom) dans la relation Mesures
. C'est donc un attribut qui permettra de faire une jointure entre les deux relations.
Correction Q2.a.
Cette requĂȘte va afficher tous les renseignements disponibles sur les centres dont l'altitude est strictement supĂ©rieure Ă 500m.
Correction Q2.c.
Correction Q3.a.
Cette requĂȘte va afficher tous les renseignements sur les mesures datĂ©es du 30 octobre 2021.
Correction Q4.a.
Cette requĂȘte va renvoyer tous les renseignements sur les centres dont la latitude est la latitude minimum de tous les centres.
Exercice 5
Exercice 4 du sujet MĂ©tropole J2 2022
Solution
Correction Q1.c.
Correction Q2.a.
La clé étrangÚre de la table morceaux
est l'attribut id_interprete
qui fait référence à la clé primaire id_interprete
de la table interpretes
.
Correction Q2.b.
morceaux
: (id_morceau : Int, titre : Text, annee : Int, #id_interprete : Int)
interpretes
: (id_interprete : Int, nom : Text : pays : Text)
Correction Q2.c.
La requĂȘte va renvoyer une erreur car la clĂ© primaire 1 est dĂ©jĂ prĂ©sente dans la table : il s'agit d'une violation de la contrainte de relation.
Exercice 6
Exercice 2 du sujet La RĂ©union J2 2022
Solution
Correction Q1.
Le couple (NumClient, NumChambre)
ne pouvait pas ĂȘtre une clĂ© primaire car un mĂȘme client peut revenir dans l'hĂŽtel et avoir la mĂȘme chambre qu'Ă un prĂ©cĂ©dent sĂ©jour. Le couple (NumClient, NumChambre)
ne serait donc pas unique et ne peut donc pas servir de clé primaire pour la relation Reservations
.
Correction Q3.
CrĂ©ditsâïž
Gilles Lassus