Les exercices de cette page portent sur la base
etude.sqlite dont une présentation est donnée
ici.
Cours dispensés par chaque enseignant
Dans la table "cours", on dispose de l'identifiant de l'enseignant dispensant chacun des cours. Cet identifiant permet de connaître le nom de l'enseignant avec la table "personne".
Écrire la requête permettant d'afficher la liste des intitulés des cours et le nom de l'enseignant dispensant ce cours.
SELECT cours.intitule, personne.nom, personne.prenom
FROM cours inner join personne
on cours.id_enseignant = personne.id_personne;
Si l'on remplace cette jointure interne par une left outer join :
SELECT cours.intitule, personne.nom, personne.prenom
FROM cours left outer join personne
on cours.id_enseignant = personne.id_personne;
le résultat nous permet de constater qu'il n'y a personne d'inscrit pour assurer le cours sur UNIX.
Enseignant
On définit ici un enseignant comme étant une personne de la table "personne" dispensant au moins un cours (table "cours").
Afficher la liste des enseignants (nom et prénom).
On reprend le code de l'exercice précédent. On n'affiche pas les cours mais seulement les noms des enseignants et on ajoute le mot clef distinct pour ne pas répéter un même nom.
SELECT distinct personne.nom, personne.prenom
FROM cours inner join personne
on cours.id_enseignant = personne.id_personne;
Nombre de cours
Afficher la liste des enseignants (avec nom et prénom) suivi du nombre de cours dispensés par cet enseignant.
SELECT personne.nom, personne.prenom, count(cours.id_cours)
FROM cours inner join personne
on cours.id_enseignant = personne.id_personne
group by personne.id_personne ;
Nombre de cours (2)
Afficher la liste des enseignants (avec nom et prénom) suivi du nombre de cours dispensés par cet enseignant pour les enseignants dispensant au moins deux cours.
SELECT personne.nom, personne.prenom, count(cours.id_cours)
FROM cours inner join personne
on cours.id_enseignant = personne.id_personne
group by personne.id_personne
having count(*)>1;
Salle de cours
Afficher la liste des intitulés des cours se déroulant dans la salle A101.
SELECT cours.intitule
FROM salle inner join cours
on salle.id_cours = cours.id_cours
where salle.nom = "A101";
Salle de cours (2)
Afficher la liste des horaires (sous la forme d'une plage horaire) des cours se déroulant dans la salle A101.
SELECT horaire.plage
FROM salle inner join horaire
on salle.id_horaire = horaire.id_horaire
where salle.nom = "A101";
Nombre de cours par salle de cours
Afficher la liste des salles et le nombre de cours se déroulant dans chacune des salles.
SELECT salle.nom, count(horaire.plage)
FROM salle inner join horaire
on salle.id_horaire = horaire.id_horaire
group by salle.nom;
Cours par salle
Afficher la liste des salles et le nom des cours se déroulant dans chacune des salles, en ordonnant par ordre alphabétique sur le nom des salles.
SELECT salle.nom, cours.intitule
FROM salle inner join cours
on salle.id_cours = cours.id_cours
order by salle.nom ASC;
Etudiant et cours
Afficher la liste des intitulés des cours avec le nom des étudiants ayant suivi chaque cours.
SELECT cours.intitule, personne.nom
FROM (aSuivi inner join personne on aSuivi.id_etudiant = personne.id_personne)
inner join cours on cours.id_cours = aSuivi.id_cours
order by cours.id_cours;
Enseignant et note
Afficher la liste des noms des enseignants avec les notes attribuées par cet enseignant.
SELECT personne.nom, aSuivi.note
FROM (cours inner join personne on cours.id_enseignant = personne.id_personne)
inner join aSuivi on cours.id_cours = aSuivi.id_cours
order by personne.nom;