Examen Corrigé SGBDR
Examen Corrigé SGBDR
Examen Corrigé SGBDR
Prrequis : Modle conceptuel de donnes (entit-association), modle relationnel, bases du langage SQL.
TD 1 - Requtes SQL
Description du systme dinformations La direction des tudes des Mines de Nancy a dcid dinformatiser la gestion des emplois du temps. Chaque tudiant est caractris par son numro dtudiant, son nom, son prnom et son ge. Chaque cours est identifi de faon unique par un sigle (SI033, MD021, . . . ) et possde un intitul (bases de donnes, mathmatiques discrtes, . . . ) ainsi quun enseignant responsable. On connat galement le nombre de sances de chaque cours. Les enseignants sont caractriss par un identifiant alphanumrique, leur nom et leur prnom. Enfin, chaque sance est identifie par le cours ainsi que le numro de la sance (sance 3 du cours SI033, sance 1 du cours de MD021, . . . ), le type dintervention (CM, TD, TP), la date, lheure de dbut et lheure de fin auxquelles la sance a lieu ainsi que la salle et lenseignant qui dispense la sance. Les tudiantssinscrivent aux cours auxquels ils souhaitent assister. Schma relationnel retenu Les cls primaires sont soulignes et les cls trangres sont en italique. -------------------------------------------------------------------------------------etudiant ( numero , nom , prenom , age ) enseignant ( id , nom , prenom ) cours ( sigle , intitule , responsable, nombreSeances ) seance ( cours , numero , type , date , salle , heureDebut , heureFin , enseignant ) inscription ( etudiant , cours ) --------------------------------------------------------------------------------------
Requtes simples
i) crire les requtes de cration des tables Etudiant et Sance . ii) Inscrivez ltudiant (l0372,Lponge,Bob,20) au cours (LOG015,Logique,jh1908). iii) Cherchez le nom et le prnom de tous les tudiants de moins de 20 ans. iv) Cherchez le nom et le prnom de lenseignant responsable du cours de Statistiques. v) Cherchez le nom et le prnom de tous les tudiants inscrits au cours de Probabilits. vi) Dterminez le nombre denseignants intervenant dans le cours de Modlisation Stochatique. vii) O et quand a lieu le premier cours dAlgbre linaire ? viii) Affichez un emploi du temps du cours de Logique. ix) Pour chaque enseignant, indiquez le nombre de cours dans lesquels il intervient (restreignez les rponses lensemble des enseignants qui interviennent dans au moins deux cours).
Requtes imbriques
i) Ajoutez un cours magistral de Logique le 14 dcembre avec Jacques Herbrand en salle S250 de 14h 18h. ii) Listez les tudiants inscrits aucun cours. iii) Combien dtudiants (diffrents) ont assists au moins une sance anime par Leonhard Euler ?
Exemple :
SELECT SUM(p.gain) FROM Participe p, Jockey j WHERE p.Numero_jockey = j.Numero_jockey AND j.nom like Jean-Claude Dusse;
Cration de tables
CREATE TABLE nom_de_la_table ( nom_de_lattribut type [ liste_de_contraintes_dattribut ] nom_de_lattribut type [ liste_de_contraintes_dattribut ] ... liste_de_contraintes_de_table );
Exemple :
CREATE TABLE cours ( sigle VARCHAR(20) NOT NULL, intitule VARCHAR(128) NOT NULL, responsable VARCHAR(50) NOT NULL, nombreSeances INT NOT NULL DEFAULT 0,
Suppression de table
DROP TABLE nom_de_la_table ;
Insertion
INSERT INTO nom_de_la_table ( attribut_1, attribut_2, : : : ) VALUES( valeur_1, valeur_2, : : : ) ;
CORRECTION
--------------------------------------------------------------------------------------------
Requtes simples
i) crire les requtes de cration des tables Etudiant et Sance . Rponse : CREATE TABLE Etudiant ( numero VARCHAR(20) PRIMARY KEY, nom VARCHAR(50) NOT NULL, prenom VARCHAR(50) NOT NULL, age INT NOT NULL CHECK(age > 0) ); CREATE TABLE Sance (
cours VARCHAR(20) NOT NULL, numero VARCHAR(50) NOT NULL, type VARCHAR(2) NOT NULL CHECK(type in "CM", "TD", "TP"), date DATE NOT NULL, salle VARCHAR(10) NOT NULL,
heureDebut TIME NOT NULL, heureFin TIME NOT NULL CHECK(heureFin > heureDebut), enseignant VARCHAR(20) NOT NULL, FOREIGN KEY (cours) REFERENCES Cours(sigle), FOREIGN KEY (enseignant) REFERENCES Enseignant(id), PRIMARY KEY (cours,numero) ); ii) Inscrivez ltudiant (l0372,Lponge,Bob,20) au cours (LOG015,Logique,jh1908). Rponse : INSERT INTO Inscription VALUES ("l0372","LOG015"); iii) Cherchez le nom et le prnom de tous les tudiants de moins de 20 ans. Rponse : SELECT nom, prenom FROM Etudiant WHERE age < 20; iv) Cherchez le nom et le prnom de lenseignant responsable du cours de Statistiques. Rponse : SELECT nom, prenom FROM Enseignant, Cours WHERE responsable = id AND intitule LIKE "Statistiques";
v) Cherchez le nom et le prnom de tous les tudiants inscrits au cours de Probabilits. Rponse : SELECT e.nom, e.prenom FROM etudiant e, inscription i, cours c WHERE e.numero = i.etudiant AND i.cours = c.sigle AND c.intitule like "Probabilites"; vi) Dterminez le nombre denseignants intervenant dans le cours de Modlisation Stochatique. Rponse : SELECT count(DISTINCT enseignant) FROM Seance, Cours WHERE sigle = cours AND intitule LIKE "%Modelisation%"; vii) O et quand a lieu le premier cours dAlgbre linaire ?
Rponse : SELECT date, salle, heureDebut, heureFin FROM Seance, Cours WHERE sigle = cours
AND numero = 1 AND intitule LIKE "Algebre lineaire"; viii) Affichez un emploi du temps du cours de Logique.
Rponse : SELECT numero, date, salle, heureDebut, heureFin, e.nom, e.prenom FROM Seance, Cours, Enseignant e WHERE sigle = cours AND enseignant = id AND intitule LIKE "Logique" ORDER BY date,heureDebut; ix) Pour chaque enseignant, indiquez le nombre de cours dans lesquels il intervient (restreignez les rponses lensemble des enseignants qui interviennent dans au moins deux cours). Rponse : SELECT e.nom, e.prenom, count(distinct cours) FROM Seance, Cours, Enseignant e WHERE sigle = cours AND enseignant = e.id GROUP BY e.id HAVING count(distinct cours)>1
Requtes imbriques
i) Ajoutez un cours magistral de Logique le 14 dcembre avec Jacques Herbrand en salle S250 de 14h 18h. Rponse : INSERT INTO Seance VALUES ( (SELECT sigle FROM Cours WHERE intitule LIKE Logique), (SELECT nombreSeances+1 FROM Cours WHERE intitule LIKE "Logique"), CM, 2008-12-14, S250, 14:00, 18:00, (SELECT id FROM Enseignant WHERE nom like "Herbrand" AND prenom = "Jacques") ); UPDATE cours SET nombreSeances = nombreSeances+1 WHERE intitule LIKE Logique; ii) Listez les tudiants inscrits aucun cours. Rponse : SELECT e.nom, e.prenom FROM Etudiant e WHERE NOT EXISTS (SELECT * FROM Inscription i WHERE i.etudiant = e.numero );
iii) Combien dtudiants (diffrents) ont assists au moins une sance anime par Leonhard Euler ? Rponse : SELECT COUNT(DISTINCT e.numero) FROM Etudiant e, Inscription i WHERE i.etudiant = e.numero AND EXISTS( SELECT s.cours FROM Enseignant e, Seance s WHERE e.id = s.enseignant AND s.cours = i.cours AND e.nom LIKE "Euler" AND e.prenom LIKE "Leonhard" );