Professional Documents
Culture Documents
TP SQL Etudiants Corrige 2023-10-30
TP SQL Etudiants Corrige 2023-10-30
/**
Corrigé du TP – Bases de Données relationnelles et SQL
- Base de données étudiants -
-- Question 1
SELECT *
FROM etudiant;
-- Question 2
SELECT *
FROM filiere;
-- Question 3
SELECT code, nom
FROM etudiant;
-- Question 4
SELECT ID, Intitule
FROM filiere
WHERE dept='Maths Info';
-- Question 5
SELECT *
FROM filiere
WHERE intitule = dept;
-- Question 6
SELECT code, nom
FROM etudiant
WHERE seriebac = 'SM' AND moybac >= 15;
-- Question 7
SELECT code , nom
FROM etudiant
WHERE anneeacces = 2023 AND moybac <= 13;
SELECT *
FROM etudiant
WHERE moybac BETWEEN 15 AND 16;
-- Question 9
SELECT DISTINCT seriebac
FROM etudiant;
-- Question 10
SELECT DISTINCT dept
FROM filiere;
-- Question 11
SELECT *
FROM etudiant
WHERE nom = 'MOHAMMED';
-- Question 12
SELECT *
FROM etudiant
WHERE nom LIKE 'M%';
-- Question 13
SELECT *
FROM etudiant
WHERE nom LIKE '%E';
-- Question 14
SELECT *
FROM etudiant
WHERE nom LIKE '%MOHAMMED%';
-- Question 15
SELECT *
FROM etudiant
WHERE naissance IS NULL;
-- Question 16
SELECT code , nom
FROM etudiant
WHERE anneeacces = 2023
AND naissance BETWEEN '2005-01-01' AND '2005-12-31';
-- Question 17
SELECT *, strftime('%Y', 'now') - strftime('%Y', naissance) AS Age
FROM etudiant;
-- Question 18
SELECT *
FROM etudiant
WHERE seriebac = 'SM' OR 'PC';
SELECT *
FROM etudiant
WHERE seriebac IN ('SM', 'PC');
-- Question 19
SELECT *
FROM etudiant
WHERE seriebac NOT IN ('SM', 'PC');
-- Question 20
SELECT code, nom
FROM etudiant
WHERE code IN (SELECT code FROM inscription WHERE AU=2023);
-- Question 21
SELECT code, nom
FROM etudiant
WHERE code NOT IN (SELECT code FROM inscription WHERE AU=2023);
-- Question 22
SELECT intitule
FROM filiere
WHERE ID NOT IN (SELECT filiere FROM inscription);
-- Question 23
SELECT *
FROM etudiant
WHERE anneeacces=2023
ORDER BY nom ASC;
-- Question 24
SELECT *
FROM inscription
WHERE au IN (2022, 2023)
ORDER BY au DESC, niveau DESC, filiere;
-- Question 1
SELECT *
FROM etudiant , inscription;
-- Question 2
SELECT *
FROM inscription, filiere;
-- Question 3
SELECT *
FROM inscription, etudiant, filiere;
-- Question 4
SELECT code, nom
FROM inscription, etudiant
WHERE inscription.code = etudiant.code AND
niveau=4 AND filiere = 'GM' AND au = 2023;
-- Question 5
SELECT code, nom
FROM inscription NATURAL JOIN etudiant
WHERE niveau=4 AND filiere = 'GM' AND au = 2023;
-- Question 6
SELECT code, nom
FROM inscription JOIN etudiant ON inscription.code = etudiant.code
WHERE niveau=4 AND filiere = 'GM' AND au = 2023;
-- Question 7
SELECT code, niveau, filiere
FROM inscription JOIN filiere ON filiere = ID
WHERE au = 2023 AND dept = 'Génie Mécanique';
-- Question 8
SELECT etudiant.*, niveau, filiere
FROM etudiant NATURAL JOIN inscription JOIN filiere ON filiere = ID
WHERE au = 2023 AND dept = 'Génie Mécanique'
ORDER BY filiere, niveau DESC;
-- Question 10
SELECT DISTINCT intitule
FROM etudiant NATURAL JOIN inscription JOIN filiere ON filiere = ID
WHERE au = 2023 AND moybac >= 16;
-- Question 11
SELECT *
FROM filiere
WHERE ID IN (SELECT filiere
FROM etudiant NATURAL JOIN inscription
WHERE seriebac='ST' AND au=2023);
-- Question 12
SELECT *
FROM filiere
WHERE ID NOT IN (SELECT filiere
FROM etudiant NATURAL JOIN inscription
WHERE seriebac != 'SM' AND au=2023);
-- Question 13
SELECT *
FROM filiere
WHERE ID NOT IN (SELECT filiere
FROM etudiant NATURAL JOIN inscription
WHERE seriebac = 'SVT' AND au=2023);
-- Question 14
SELECT *
FROM etudiant e NATURAL JOIN inscription a
JOIN inscription b ON e.code = b.code
WHERE a.niveau=4 AND a.filiere='GI' AND a.au=2023
AND b.niveau=3 AND b.decision='V';
-- Question 15
SELECT e.code, e.nom, a.filiere, b.filiere
FROM etudiant e NATURAL JOIN inscription a
JOIN inscription b ON e.code = b.code
WHERE a.au=2022 AND b.au=2023 AND a.filiere != b.filiere;
SELECT intitule
FROM filiere
WHERE id IN (SELECT b.filiere
FROM etudiant e NATURAL JOIN inscription a
JOIN inscription b ON e.code = b.code
WHERE a.au=2022 AND a.decision='V' AND a.moy>=15 AND b.au=2023);
-- Question 17
-- On suppose que le nom MOHAMMED figure une seule fois
SELECT *
FROM etudiant NATURAL JOIN inscription
WHERE (anneeacces, niveau, filiere) = (SELECT anneeacces, niveau,
filiere
FROM etudiant NATURAL JOIN inscription
WHERE nom='MOHAMMED' AND au=2023);
-- Question 18
SELECT *
FROM etudiant
WHERE seriebac='PC' AND
moybac >= ALL (SELECT moybac FROM etudiant WHERE seriebac='SM' AND
moybac IS NOT NULL);
-- On note ici que ALL n'est pas supporté par SQLite
-- Une autre méthode avec MAX
SELECT *
FROM etudiant
WHERE seriebac='PC' AND moybac >= (SELECT max(moybac) FROM etudiant
WHERE seriebac='SM');
-- Question 19
SELECT *
FROM etudiant
WHERE seriebac='PC' AND
moybac >= ANY (SELECT moybac FROM etudiant WHERE seriebac='SM');
-- On note ici que ANY n'est pas supporté par SQLite
-- Une autre méthode avec MIN
SELECT *
FROM etudiant
WHERE seriebac='PC' AND moybac >= (SELECT MIN(moybac) FROM etudiant
WHERE seriebac='SM');
-- Question 1
SELECT AVG(moybac)
FROM etudiant;
-- Question 2
SELECT MAX(moybac), AVG(moybac), MIN(moybac)
FROM etudiant;
-- Question 3
SELECT AVG(moybac)
FROM etudiant
WHERE seriebac = 'SM';
-- Question 4
SELECT *
FROM etudiant
WHERE moybac >= (SELECT AVG(moybac) FROM etudiant);
-- Question 5
SELECT COUNT(*)
FROM etudiant
WHERE seriebac = 'PC';
-- Question 6
SELECT COUNT(*)
FROM etudiant
WHERE seriebac = 'SM';
-- Question 7
SELECT seriebac, COUNT(*)
FROM etudiant
GROUP BY seriebac;
-- Question 8
SELECT anneeacces, AVG(moybac)
FROM etudiant
GROUP BY anneeacces;
-- Question 9
SELECT anneeacces, seriebac, AVG(moybac)
FROM etudiant
GROUP BY anneeacces, seriebac;
-- Question 10
SELECT filiere, au, COUNT (*)
FROM inscription
GROUP BY filiere, au;
-- Question 12
SELECT filiere, AVG(moy)
FROM inscription
WHERE niveau = 4 AND au = 2022
GROUP BY filiere;
-- Question 13
SELECT filiere, AVG(moy)
FROM inscription
WHERE niveau = 4 AND au = 2022
GROUP BY filiere
HAVING AVG(moy) >= 14;
-- Question 14
SELECT anneeacces
FROM etudiant
GROUP BY anneeacces
HAVING MIN(moybac) >= 14;
-- Question 15
-- La moyenne max par filiere en 4 2022
SELECT filiere, MAX(moy)
FROM inscription
WHERE niveau = 4 AND au = 2022
GROUP BY filiere;
-- Question 17
-- La moyenne max par dept en 4 2022
SELECT filiere, MAX(moy)
FROM inscription JOIN filiere ON filiere=id
WHERE au=2022
GROUP BY dept;
-- Question 1
DELETE FROM inscription
WHERE au = 2020;
-- Question 2
UPDATE inscription
SET moy = moy + 1
WHERE niveau=4 AND filiere='GI' AND au=2023;
-- Question 3
UPDATE inscription
SET moy = moy + 1
WHERE niveau=4 AND filiere='GI' AND au=2023
AND code IN (SELECT code FROM etudiant WHERE seriebac='SM');
-- Question 4
DELETE FROM etudiant
WHERE code NOT IN (SELECT code FROM inscription WHERE au=2023);
-- Question 5
DELETE FROM filiere
WHERE id NOT IN (SELECT filiere FROM inscription);
-- Question 6
DELETE FROM etudiant;
DELETE FROM inscription;
DELETE FROM filiere;