Exemples SQL
#1. La liste des examens pour lesquels il n'y a pas d'épreuves prévues.
#1.1 avec sous-requête
select numExamen
from examen
where numExamen not in (select numExamen from epreuve);
#1.2 sans sous-requêtes
select e.numExamen
from examen e
left join epreuve ep on e.numExamen = ep.numExamen
where ep.numEpreuve is null;
#2. Pour chaque étudiant, le numéro de l'épreuve qu'il a le moins réussi.
#2.1
select numEtudiant, numEpreuve
from note
where (numEtudiant, note) IN (
select numEtudiant, min(note)
from note
group by numEtudiant
);
#2.2 pas possible sans sous-requête !
#3. Épreuve avec la meilleure moyenne.
#3.1 Version bourrine
select numEpreuve, avg(note) as avg
from note
group by numEpreuve
having avg = (
select max(moy)
from (
select numEpreuve, avg(note) as moy
from note
group by numEpreuve
) as moyennes
);
#3.2 Version incomplète
select numEpreuve, avg(note) moy
from note
group by numEpreuve
order by moy desc limit 1;
#3.3 Version gagnante
select numEpreuve, avg(note) as moy
from note
group by numEpreuve
having moy >= ALL (
select avg(n2.note)
from note n2
group by n2.numEpreuve
);
#3.4 -> voir vues.sql
#4. Quels étudiants ont une note à toutes les épreuves notées ?
select n1.numEtudiant
from note n1
(select distinct numEpreuve, n1.numEtudiant from note)
in (select distinct numEpreuve, numEtudiant from note);