Exercices SQL débranchés⚓︎
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.
Correction
Ordonnances ((code, Int), (id_patient#, Int), (matricule_medecin#, Int), (date_ord, Text), (medicaments, Text))
Q1. (HP) Donner les commandes SQL permettant de créer ces tables.
Correction
```SQL 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 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» ?
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 ?
Correction
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 ?
Correction
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
Exercice 1 du sujet Amérique du Nord J1 2022
Correction
??? note \"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.
??? note \"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.
??? note \"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 :
UPDATE Sports SET prix = 1350
WHERE nomSport = 'planche à voile' AND nomStation = 'La tramontane catalane'
??? note \"Correction Q2.b.\"
INSERT INTO Station VALUES ('Soleil Rouge', 'Bastia', 'Corse')
INSERT INTO Sport VALUES ('plongée', 'Soleil Rouge', 900)
??? note \"Correction Q3.a.\"
??? note \"Correction Q3.b.\"
??? note \"Correction Q4.a.\"
SELECT Station.ville, Station.nomStation FROM Station
JOIN Sport ON Sport.nomStation = Station.nomStation
WHERE Sport.nomSport = 'plongee'
??? note \"Correction Q4.b.\"
Exercice
Exercice 4 du sujet Centres Étrangers J1 2022
Correction
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 4
Exercice 4 du sujet Métropole J2 2022
Correction
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 5
Exercice 2 du sujet La Réunion J2 2022
Correction
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.
Exercice 6
Exercice 3 du sujet Amérique du Nord J1 2024
Partie A
Correction Q1
Le séparateur utilisé est le point-virgule ;.
Correction Q2
Ce choix a été fait pour avoir la possibilité d'utiliser la virgule à l'intérieur des champs, comme dans Allemagne, Italie, Japon.
Correction Q3
(la fonction renvoie une liste de dictionnaires et non un dictionnaire comme dit dans l'énoncé)Correction Q4
La méthode utilisée est la méthode sleep, à la ligne 37.
Correction Q5
donnees[i] est un dictionnaire.
Correction Q6
| Python | |
|---|---|
Si vous souhaitez jouer avec ces flashcards, téléchargez le fichier flashcards.csv et utilisez le code ci-dessous :
Partie B