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