Les exercices de cette page portent sur la base
etude.sqlite dont une présentation est donnée
ici.
Etudiant ayant eu des notes supérieures à la moyenne des notes
- Afficher les identifiants des étudiants ayant eu au moins une note supérieure à la moyenne des notes.
- Afficher maintenant les noms et prénoms de ces étudiants.
Identifiant des étudiants ayant eu au moins une note supérieure à la moyenne des notes.
SELECT distinct id_etudiant FROM aSuivi where note >
(select avg(note) from aSuivi);
Nom et prénom des étudiants ayant eu au moins une note supérieure à la moyenne des notes.
On dispose déjà des identifiants avec la requête précédente. On peut utiliser cette requête précédente en requête interne :
select nom, prenom from personne where id_personne in
(
SELECT distinct id_etudiant FROM aSuivi where note >
(select avg(note) from aSuivi)
);
Personnes plus âgées que Adèle Gemlamorte
Afficher les noms et prénoms des personnes plus âgées que Adèle Gemlamorte.
select nom, prenom from personne where anneeNaissance <
( select anneeNaissance from personne where nom = "Gemlamorte" and prenom = "Adèle" );
Étudiant ayant eu au moins une note supérieure à 17
- Afficher la liste des identifiants des étudiants ayant eu au moins une note supérieure à 17.
- Afficher la liste de leurs noms et prénoms.
Les identifiants
select distinct A1.id_etudiant from aSuivi as A1 where
exists (select * from aSuivi as A2 where note > 17 and A2.id_etudiant = A1.id_etudiant)
Les noms et prénoms
select nom, prenom from personne where id_personne in
(
select distinct A1.id_etudiant from aSuivi as A1 where
exists (select * from aSuivi as A2 where note > 17 and A2.id_etudiant = A1.id_etudiant)
) ;
Enseignant donnant au moins deux cours
- Afficher la liste des enseignants encadrant au moins deux cours.
- Afficher leurs noms et prénoms.
Les identifiants
select distinct C1.id_enseignant from cours as C1 where
( select count(id_cours) from cours as C2 where C1.id_enseignant = C2.id_enseignant) > 1;
Les noms et prénoms
select nom, prenom from personne where id_personne in
(
select distinct C1.id_enseignant from cours as C1 where
(select count(id_cours) from cours as C2 where C1.id_enseignant = C2.id_enseignant) > 1
);
Liste des cours dans lesquels au moins un étudiant n'a pas la moyenne
Afficher la liste des cours (par leur intitulé) pour lesquels au moins un étudiant a une note inférieure à 10.
select intitule from cours where id_cours in
(
select distinct A1.id_cours from aSuivi as A1 where
10 > ( select min(note) from aSuivi as A2 where A1.id_cours = A2.id_cours )
);
Liste des étudiants ayant suivi tous les cours commençant par j
Afficher la liste des étudiants ayant suivi tous les cours dont l'intitulé commence par j.
Les identifiants
select distinct A1.id_etudiant from aSuivi as A1 where not exists
(
select C.id_cours from cours as C
where C.intitule like 'j%' and not exists
(
select A2.id_cours from aSuivi as A2
where C.id_cours = A2.id_cours and A2.id_etudiant = A1.id_etudiant
)
)
La requête la plus interne sélectionne les lignes de aSuivi correspondant à un cours d'identifiant C.id_cours (et donc commençant par j) et suivi par l'étudiant d'identifiant A1.id_etudiant.
La requête du niveau au-dessus sélectionne donc les lignes de la table cours telles que l'attribut id_cours commence par j et telles que l'étudiant d'identifiant A1.id_etudiant n'ait pas suivi ce cours.
La requête la plus externe sélectionne donc les étudiants pour lesquels il n'existe pas de cours commençant par j qu'ils ne suivent pas : ce sont donc les étudiants qui ont suivi tous les cours dont l'intitulé commence par j.
Leurs noms
select nom, prenom from personne where id_personne in
(
select distinct A1.id_etudiant from aSuivi as A1 where not exists
(
select C.id_cours from cours as C
where C.intitule like 'j%' and not exists
(
select A2.id_cours from aSuivi as A2
where C.id_cours = A2.id_cours and A2.id_etudiant = A1.id_etudiant
)
)
)