Académique Documents
Professionnel Documents
Culture Documents
ExamenBD 3IIR EMSI PL SQL 2021 . . . . NOUVEAUUUUUU
ExamenBD 3IIR EMSI PL SQL 2021 . . . . NOUVEAUUUUUU
EMSI CASA
3IIR, SQL PL/SQL
2020-2021
Examen
DUREE : 2H00 DOCUMENTS DU COURS ET TP AUTORISES AU FORMAT PAPIER
ENONCE
On considère le schéma suivant de la base de données : BDExamens.
Les clés primaires sont soulignées et les flèches indiquent une contrainte d’intégrité
référentielle.
La sémantique de chaque table et attribut est donnée dans le tableau suivant :
1/6
EMSI CASA-3IIR-SQL PLSQL-EXAMEN FINAL LE 11/02/2021
NOM : PRENOM : GROUPE
-- contraintes :
-- (NumCours, NumEtd) primary key
-- NumEtd qui fait référence à NumEtd dans la table Etudiant
-- NumCours qui fait référence à NumCous dans la table Cours
-- NoteExam obligatoire et comprise entre 0 et 20
2/6
EMSI CASA-3IIR-SQL PLSQL-EXAMEN FINAL LE 11/02/2021
NOM : PRENOM : GROUPE
2.2. Ecrivez une requête qui retourne les notes de l’étudiant numéro 117 obtenues dans tous
les examens qu’il a passés. Le schéma de la réponse est (NumCours, NomCours, NoteExam)
(1 point).
……… select co.NumCours, co.NomCours, ex.NoteExam
from examens ex , cours co
where ex.NumEtd=117 AND ex.NumCours=Co.NumCours;
-- ou
Select NoteExam
from examens ex JOIN cours co ON ex.NumCours=Co.NumCours
where ex.NumEtd=117;
…………………………………………………………………………………………...
2.3. Ecrivez une requête qui retourne la moyenne de tous les étudiants. La moyenne d’un
étudiant est la somme de ses notes obtenues, dans les examens de ses cours, divisée par le
nombre des notes. Le résultat doit être ordonné par la classe et le nom d’étudiant. Schéma de
la réponse (NumEtd, NomEtd, Classe, Moyenne). (2 points).
-- version 2 (on calcule pour tous les cours et si l'étudiant n'a pas une note dans un cours
-- on comptabilise 0)
Select et.NumEtd, et.NomEtd, et.Classe,
NVL(SUM(ex.NoteExam),0)/COUNT(co.NumCours) Moyenne
from etudiant et LEFT JOIN examens ex ON et.NumEtd=ex.NumEtd
RIGHT JOIN Cours co ON ex.NumCours=co.NumCours
GROUP BY et.NumEtd, et.NomEtd, et.Classe
ORDER BY NVL(SUM(ex.NoteExam),0)/COUNT(co.NumCours);
……………………………………………………………………………………………...
…………………………………………………………………………………………………...
3/6
EMSI CASA-3IIR-SQL PLSQL-EXAMEN FINAL LE 11/02/2021
NOM : PRENOM : GROUPE
2.4. Ecrivez une requête qui retourne tous les étudiants de la classe 5 qui ont une moyenne
inférieure à 10 (<10) ordonnés par le nom et le prénom des étudiants. Schéma de la réponse
(NumEtd, NomEtd, Moyenne). (1.5 points)
…………… select et.NumEtd, et.NomEtd, et.Classe,
NVL(SUM(ex.NoteExam),0)/COUNT(co.NumCours) Moyenne
from etudiant et LEFT JOIN examens ex ON et.NumEtd=ex.NumEtd
RIGHT JOIN Cours co ON ex.NumCours=co.NumCours
where et.classe=5
GROUP BY et.NumEtd, et.NomEtd, et.Classe
HAVING NVL(SUM(ex.NoteExam),0)/COUNT(co.NumCours)<10
ORDER BY NVL(SUM(ex.NoteExam),0)/COUNT(co.NumCours);
……………………………………………………………………………………...
2.5. Ecrivez une requête qui retourne le major de la classe 5. Le major de la classe est
l’étudiant, ou les étudiants, qui a la plus grande moyenne. Schéma de la réponse (NumEtd,
NomEtd, Moyenne). (1.5 points)
…………………………………………………………………………………………………...
PARTIE 3 : FONCTIONS ET PROCEDURES
On veut calculer les moyennes des étudiants d’une classe et les stocker dans la table
TabMoysClasse donnée par :
NumLign le numéro de ligne donné par la séquence SeqTabMoys
NumClasse le numéro de la classe de l’étudiant
NumEtd le numéro de l’étudiant
Moy la moyenne de l’étudiant
DtCalcul la date du clacul. La date d’aujourd’hui.
4/6
EMSI CASA-3IIR-SQL PLSQL-EXAMEN FINAL LE 11/02/2021
NOM : PRENOM : GROUPE
WHERE co.Classe=p_Classe
GROUP BY et.NumEtd, et.NomEtd, et.Classe
ORDER BY NVL (SUM (ex.NoteExam),0)/COUNT(co.NumCours);
create or replace procedure MoyenneDeClasse (p_Classe IN number)
IS
CURSOR ListeMoysEts(ArgClasse IN number) IS
select et.NumEtd, et.NomEtd, NVL(SUM(ex.NoteExam),0)/COUNT(co.NumCours)
Moyenne
from etudiant et LEFT JOIN examens ex ON et.NumEtd=ex.NumEtd
RIGHT JOIN Cours co ON ex.NumCours=co.NumCours
WHERE co.Classe=ArgClasse
GROUP BY et.NumEtd, et.NomEtd, et.Classe
ORDER BY NVL (SUM (ex.NoteExam),0)/COUNT(co.NumCours);
BEGIN
FOR LigneMoy IN ListeMoysEts(p_Classe) LOOP
INSERT INTO TabMoysClasse values (
SeqTabMoys.NEXTVAL,
p_Classe,
LigneMoy.NumEtd,
LigneMoy.Moyenne,
sysdate
);
END LOOP;
END MoyenneDeClasse;
/
PARTIE 4 : TRIGGER
On veut tracer les modifications des notes dans la table EXAMENS et stocker les
modifications dans la table TrModifNoteExamens donnée par : NumLign le numéro de ligne
donné par la séquence SeqTabTr
NumClasse le numéro de la classe de l’étudiant
NumEtd le numéro de l’étudiant
NumCours le nuémro de cours dont la note de l’examen a été modifiée
OldNote l’ancienne note autrement la note avant mdification
NewNote la nouvelle valeur de la note après modification
Oper l’opérateur qui a procédé à la modification (il est donné par USER) DtModif la
date de la modification. La date d’aujourd’hui.
5/6
EMSI CASA-3IIR-SQL PLSQL-EXAMEN FINAL LE 11/02/2021
NOM : PRENOM : GROUPE
On suppose que la table TrModifNoteExamens et la séquence SeqTabTr sont déjà créées.
…………………………………………………………………………………………………...
create or replace trigger CheckModifsNotesExamens
AFTER UPDATE OF NoteExa
ON EXAMENS
FOR EACH ROW
DECLARE
vclasse etudiant.classe%type;
BEGIN
select classe into vclasse
from etudiant
where numetd=: NEW.NumEtd;
6/6
EMSI CASA-3IIR-SQL PLSQL-EXAMEN FINAL LE 11/02/2021