Requêtes SQL (bis) : Petits exercices

Transcription

Requêtes SQL (bis) : Petits exercices
Requêtes SQL (bis) : Petits exercices
Guy Tremblay
25 septembre 2013
Soit les schémas de relation suivants :
CREATE TABLE Resultat
( trimestre VARCHAR(3),
codePerm VARCHAR(12),
sigle VARCHAR(7),
noteObtenue INTEGER NOT NULL
CHECK(noteObtenue BETWEEN 0 AND 100),
PRIMARY KEY(trimestre, codePerm, sigle),
FOREIGN KEY(codePerm) REFERENCES Etudiant,
FOREIGN KEY(sigle) REFERENCES Cours
);
CREATE TABLE Etudiant
( codePerm VARCHAR(12) PRIMARY KEY,
nom VARCHAR(30) NOT NULL
);
CREATE TABLE Cours
( sigle VARCHAR(7) PRIMARY KEY,
titre VARCHAR(30) NOT NULL
);
CREATE TABLE Inscription
( codePerm VARCHAR(12),
codeProg VARCHAR(4),
PRIMARY KEY(codePerm, codeProg),
FOREIGN KEY(codePerm) REFERENCES Etudiant,
FOREIGN KEY(codeProg) REFERENCES Programme
);
CREATE TABLE Programme
( codeProg VARCHAR(4) PRIMARY KEY,
titre VARCHAR(30) NOT NULL
);
Exprimez les requètes suivantes en SQL
1. Le nombre d’étudiants inscrits dans le programme dont le titre contient «informatique».
SELECT COUNT(*) AS "Nb. Etudiants Informatique"
FROM Programme NATURAL JOIN Inscription
WHERE titre LIKE ’%informatique%’
2. La moyenne de l’étudiant nommé Alexis.
SELECT AVG(noteObtenue) AS "Moyenne Alexis"
FROM Etudiant NATURAL JOIN Resultat
WHERE nom = ’Alexis’
3. Le nombre de cours suivis par chaque étudiant qui a suivi au moins un cours.
SELECT codePerm, nom, COUNT(noteObtenue)
FROM Etudiant NATURAL JOIN Resultat
GROUP BY codePerm, nom
ORDER BY codePerm
1
4. La moyenne académique de chacun des étudiants du programme d’informatique.
SELECT codePerm, nom, AVG(noteObtenue)
FROM Programme NATURAL JOIN Inscription NATURAL JOIN Etudiant NATURAL JOIN Resultat
WHERE Programme.titre LIKE ’%informatique%’
GROUP BY codePerm, nom
ORDER BY codePerm
WITH
EtudiantsInformatique AS
(SELECT codePerm
FROM Programme NATURAL JOIN Inscription
WHERE Programme.titre LIKE ’%informatique%’)
SELECT codePerm, nom, AVG(noteObtenue)
FROM EtudiantsInformatique NATURAL JOIN Resultat NATURAL JOIN Etudiant
GROUP BY codePerm, nom
ORDER BY codePerm
5. Les noms des étudiants qui ont suivi trois cours ou plus.
SELECT nom
FROM Etudiant
WHERE 3 <=
(SELECT COUNT(*)
FROM Resultat
WHERE codePerm = Etudiant.codePerm)
ORDER BY nom
6. Les noms des étudiants qui ont suivi au moins un cours qui n’est pas siglé «INF».
SELECT nom
FROM Etudiant
WHERE EXISTS
(SELECT *
FROM Etudiant NATURAL JOIN Cours NATURAL JOIN Resultat
WHERE sigle NOT LIKE ’INF%’)
2