jointures sur la base etude.sqlite

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;