Académique Documents
Professionnel Documents
Culture Documents
On souhaite créer une base de données pour représenter les notes obtenues par des
étudiants à différents examens. Chaque étudiant est inscrit à exactement un cursus, où
chaque cursus est associé à un responsable. Dans chaque cursus, plusieurs examens sont
planifiés, chacun avec le même coefficient. Chaque étudiant obtient une note pour chaque
examen, laquelle est comprise entre 0 et 20.
Pour modéliser cette situation, nous avons défini les tables suivantes :
Table Enseignant : La table Enseignant contient des informations sur les enseignants, tels
que leur identifiant (id), nom, prénom et spécialité. Chaque enseignant peut être associé à
plusieurs cursus en tant que responsable.
Table Cursus : La table Cursus représente les cursus auxquels les étudiants sont inscrits.
Chaque cursus a un identifiant unique (id), un nom (unique), et est lié à un enseignant
responsable grâce à l'identifiant responsable_id. La clé étrangère responsable_fk assure que
l'enseignant responsable existe dans la table Enseignant.
Table Etudiant : La table Etudiant enregistre les détails des étudiants, tels que l'INE
(identifiant unique), nom, prénom et le cursus auquel ils sont inscrits. L'attribut cursus_id est
une clé étrangère liée à l'identifiant unique des cursus dans la table Cursus.
Table Examens : La table Examens représente les différents examens planifiés dans chaque
cursus. Chaque examen a un identifiant unique (examen_id), une matière et est associé à un
cursus via l'attribut cursus_id. La contrainte curs_Examen_fk garantit que le cursus auquel
l'examen est associé existe dans la table Cursus.
Table Note : La table Note stocke les notes obtenues par les étudiants à chaque examen. Elle
utilise les identifiants des étudiants (etudiant_id) et des examens (examen_id) en tant que clés
primaires composées. La note est soumise à une contrainte CHECK pour s'assurer qu'elle est
comprise entre 0 et 20. Les clés étrangères et les contraintes etudiant_fk et examen_fk
garantissent que les références croisées aux tables Etudiant et Examens sont valides.
Table SalleExamen : La table SalleExamen contient des informations sur les salles d'examen,
comme leur identifiant (id), leur nom et leur capacité.
Table ExamenSalle : La table ExamenSalle associe des salles d'examen à des examens
spécifiques. Elle utilise les identifiants des examens (examen_id) et des salles (salle_id)
comme clés primaires composées. La contrainte examen_ES_fk garantit que l'examen auquel
A.Bakki 1/8
Génie Informatique
2ème année - Semestre 3
2023 | 2024
la salle est associée existe dans la table Examens, et la contrainte salle_fk assure que la salle
référencée existe dans la table SalleExamen.
Interrogations
1. Classer tous les étudiants dans l’ordre alphabétique (nom puis prénom).
SELECT nom
A.Bakki 2/8
Génie Informatique
2ème année - Semestre 3
2023 | 2024
FROM Etudiant
WHERE NOT EXISTS (
SELECT *
FROM Note
WHERE Note.etudiant_id = Etudiant.ine AND Note.note < 10
);
SELECT nom
FROM Etudiant
WHERE ine NOT IN (
SELECT etudiant_id
FROM Note
WHERE note < 10
);
SELECT nom
FROM Etudiant
WHERE 10 <= ALL (
SELECT note
FROM Note
WHERE etudiant_id = Etudiant.ine
);
7. La meilleure note obtenue, le nom de la matière dans laquelle elle a été obtenue, et le
nom de l’étudiant.
A.Bakki 3/8
Génie Informatique
2ème année - Semestre 3
2023 | 2024
9. Les noms des étudiants qui ont toutes leurs notes au dessous de 10.
11. Les étudiants de Licence Pro ayant obtenu la note la plus élevé parmi tout les étudiants.
SELECT E.nom
FROM Etudiant AS E
JOIN Note AS N ON E.ine = N.etudiant_id
JOIN Examens AS Ex ON Ex.examen_id = N.examen_id
JOIN Cursus AS C ON C.id = E.cursus_id
WHERE C.nom = 'Licence Pro'
AND N.note >= ALL (SELECT note FROM Note WHERE etudiant_id = E.ine);
A.Bakki 4/8
Génie Informatique
2ème année - Semestre 3
2023 | 2024
13. Afficher les noms, et les prénoms de tous les étudiants, et pour ceux qui ont passé des
examens les notes obtenues et le numéro d’examen.
15. Afficher les nom des étudiants et la filière qui ont passé l’examen BD et qui ont obtenu
la moyenne.
A.Bakki 5/8
Génie Informatique
2ème année - Semestre 3
2023 | 2024
FROM Examens AS Ex
JOIN Cursus AS C ON Ex.cursus_id = C.id
JOIN Note AS N ON Ex.examen_id = N.examen_id
WHERE N.note < (
SELECT AVG(N2.note)
FROM Note AS N2
WHERE N2.examen_id = Ex.examen_id
)
GROUP BY Ex.matiere, C.nom
HAVING COUNT(DISTINCT N.etudiant_id) >= 2;
18. Nombre d’examens en DUT.
22. Pour chaque étudiant, son nom, sa filière le nombre d’examen passé et la moyenne
générale obtenue.
A.Bakki 6/8
Génie Informatique
2ème année - Semestre 3
2023 | 2024
FROM Etudiant AS E
JOIN Cursus AS C ON E.cursus_id = C.id
LEFT JOIN Note AS N ON E.ine = N.etudiant_id
LEFT JOIN Examens AS Ex ON N.examen_id = Ex.examen_id
GROUP BY E.nom, E.prenom, C.nom;
23. En utilisant l’opérateur EXEPT, Afficher les étudiants en Licence Pro.
24. Afficher une phrase pour chaque examen indiquant le nom et le prénom de l'étudiant,
la matière de l'examen, et le nombre de jours écoulés depuis la date de l'examen jusqu'à
aujourd'hui.
SELECT concat(E.nom, " " ,E.prenom, " a passé l'examen de ", Ex.matiere, " il y a " ,
EXTRACT(DAY FROM CURRENT_DATE) - EXTRACT(DAY FROM ES.date_examen), "
jours")
FROM Etudiant AS E
JOIN Cursus AS C ON E.cursus_id = C.id
JOIN Note AS N ON E.ine = N.etudiant_id
JOIN Examens AS Ex ON N.examen_id = Ex.examen_id
JOIN ExamenSalle AS ES ON Ex.examen_id = ES.examen_id;
25. Afficher, pour chaque examen, la matière, le nom de la salle, la durée totale de l'examen
en heures, et le nombre d'étudiants distincts ayant passé l'examen.
SELECT
ExSalle.examen_id,
Ex.matiere,
SE.nom AS nom_salle,
EXTRACT(HOUR FROM ExSalle.heure_fin) - EXTRACT(HOUR FROM
ExSalle.heure_debut) AS duree_totale_heures,
COUNT(DISTINCT N.etudiant_id) AS nombre_etudiants_passes
FROM
Examens AS Ex
JOIN
ExamenSalle AS ExSalle ON Ex.examen_id = ExSalle.examen_id
JOIN
A.Bakki 7/8
Génie Informatique
2ème année - Semestre 3
2023 | 2024
A.Bakki 8/8