Questions scolaires

[30 min]

Soit le schéma relationnel suivant gérant le fonctionnement d'une école et les notes des élèves.

1
CLASSE(#intitule)
2
MATIERE(#intitule)
3
ELEVE(#login, nom, prenom, age, classe=>CLASSE)
4
ENSEIGNANT(#login, nom, prenom, mail, matiere=>MATIERE)
5
ENSEIGNE(#enseignant=> ENSEIGNANT, #classe=>CLASSE)
6
NOTE(#eleve=>ELEVE, #enseignant=>ENSEIGNANT, #date_examen, note)
7
8
Contrainte : un enseignant ne peut mettre une note à un élève que si celui-ci se trouve dans une classe dans laquelle il enseigne.

NB : Nous n'utiliserons pas de sous-requêtes.

Question

En algèbre relationnel et en SQL, afficher la liste des tous les étudiants dont le nom commence par A.

Solution

1
R1 = Restriction(ELEVE, nom COMME 'A%')
2
R = Projection(R1, nom, prenom)
1
SELECT nom, prenom
2
FROM ELEVE
3
WHERE nom LIKE 'A%';

Question

En algèbre relationnel et en SQL, afficher les noms et prénoms des enseignants qui n'enseignent à aucune classe.

Solution

1
R1 = JointureExterneGauche(ENSEIGNANT, ENSEIGNE, login=enseignant)
2
R2 = Restriction(R1, classe = NULL)
3
R = Projection(R2, nom, prenom)
1
SELECT nom, prenom
2
FROM ENSEIGNANT LEFT JOIN ENSEIGNE on login=enseignant
3
WHERE classe IS NULL;

Question

En SQL, affichez le nombre d'étudiants enregistrés en "Terminale S 2".

Solution

1
SELECT classe, COUNT(login)
2
FROM ELEVE
3
WHERE classe = 'Terminale S 2' ;

Question

En SQL, affichez les logins, noms, prénoms, classes et moyennes des élèves en cours de "Mathématiques", par ordre décroissant de moyenne, à condition qu'ils aient au minimum 2 notes dans cette matière.

Solution

1
SELECT EL.login, EL.nom, EL.prenom, EL.classe, AVG(note) AS moyenne
2
FROM ELEVE EL, NOTE, ENSEIGNANT EN
3
WHERE EL.login = eleve
4
  AND enseignant = EN.login
5
  AND matiere = 'Mathématiques'
6
GROUP BY EL.login, EL.nom, EL.prenom, EL.classe
7
HAVING COUNT(note) > 1
8
ORDER BY moyenne DESC;

Question

En SQL, à des fins de statistiques, nous souhaitons rechercher par enseignant et par classe, les classes qui n'ont pas la moyenne générale, et afficher pour celles-ci : le nom, prénom et mail de l'enseignant en question, la matière enseignée, la classe, la moyenne d'âge des étudiants avec les extrêmes (minimum et maximum), la moyenne générale de la classe avec les valeurs extrêmes, ainsi que le nombre d'étudiants présents dans cette classe ; le tout classé par ordre alphabétique de classe, puis de nom et de prénom de l'enseignant.

Indice

On fera l'hypothèse que tous les étudiants d'une classe ont le même nombre de notes (pas d'absence aux examens).

Solution

1
SELECT EL.classe, ENA.nom, ENA.prenom, ENA.mail, ENA.matiere, AVG(EL.age), MIN(EL.age), MAX(EL.age), COUNT(distinct EL.login), MIN(note), MAX(note), AVG(note)
2
FROM ELEVE EL, NOTE N, ENSEIGNE EN, ENSEIGNANT ENA
3
WHERE EL.login = N.eleve
4
  AND EL.classe = EN.classe
5
  AND EN.enseignant = ENA.login
6
  AND N.enseignant = ENA.login
7
GROUP BY ENA.login, ENA.nom, ENA.prenom, ENA.mail, EL.classe, ENA.matiere
8
HAVING AVG(note) <= 10
9
ORDER BY EL.classe, ENA.nom, ENA.prenom;