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);