Download as pdf or txt
Download as pdf or txt
You are on page 1of 10

Université Moulay Ismail 2023-2024

ENSAM Meknès S3 / 4ième Année

/**
Corrigé du TP – Bases de Données relationnelles et SQL
- Base de données étudiants -

Le SGBD à utiliser est SQLite ou MySQL.

E. Zemmouri - ENSAM Meknes


**/

-- Partie 2. Interrogation d’une seule relation

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

E. Zemmouri – ENSAM Meknès 1


-- Question 8
SELECT *
FROM etudiant
WHERE moybac >= 15 AND moybac <= 16;

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

E. Zemmouri – ENSAM Meknès 2


SELECT code , nom
FROM etudiant
WHERE anneeacces = 2023
AND naissance LIKE '2005-%';

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

E. Zemmouri – ENSAM Meknès 3


-- Partie 3. Les jointures

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

SELECT code, nom


FROM inscription JOIN etudiant ON inscription.code = etudiant.code AND
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;

E. Zemmouri – ENSAM Meknès 4


-- Question 9
SELECT etudiant.*, dept
FROM etudiant NATURAL JOIN inscription JOIN filiere ON filiere = ID
WHERE anneeacces = 2023 AND au = 2023;

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

E. Zemmouri – ENSAM Meknès 5


-- Question 16
SELECT DISTINCT intitule
FROM etudiant e NATURAL JOIN inscription a
JOIN inscription b ON e.code = b.code
JOIN filiere f ON f.id = b.filiere
WHERE a.au=2022 AND a.decision='V' AND a.moy>=15 AND b.au=2023;

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

E. Zemmouri – ENSAM Meknès 6


-- Partie 4. Groupement et agrégation

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

E. Zemmouri – ENSAM Meknès 7


-- Question 11
SELECT dept, COUNT (*)
FROM inscription JOIN filiere ON filiere = id
WHERE au = 2023
GROUP BY dept;

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

-- Les étudiants qui ont la moyenne max de la filiere en 4 2022


SELECT *
FROM etudiant NATURAL JOIN inscription a
WHERE niveau = 4 AND au = 2022
AND moy = ( SELECT MAX(moy)
FROM inscription b
WHERE niveau = 4 AND au = 2022 AND b.filiere = a.filiere);

-- Une autre methode


SELECT *
FROM etudiant NATURAL JOIN inscription
NATURAL JOIN (SELECT filiere, MAX(moy) as maxmoy
FROM inscription
WHERE niveau = 4 AND au = 2022
GROUP BY filiere )
WHERE niveau = 4 AND au = 2022 AND moy = maxmoy ;

E. Zemmouri – ENSAM Meknès 8


-- Question 16
-- La moyenne par filiere en 4 2022
SELECT filiere, AVG(moy)
FROM inscription
WHERE niveau = 4 AND au = 2022
GROUP BY filiere;

-- Les étudiants qui ont une moyenne sup à la moyenne de la filière en 4


2022
SELECT *
FROM etudiant NATURAL JOIN inscription a
WHERE niveau = 4 AND au = 2022
AND moy >= ( SELECT AVG(moy)
FROM inscription b
WHERE niveau = 4 AND au = 2022 AND b.filiere =
a.filiere);

-- Une autre methode


SELECT *
FROM etudiant NATURAL JOIN inscription
NATURAL JOIN (SELECT filiere, AVG(moy) as avgmoy
FROM inscription
WHERE niveau = 4 AND au = 2022
GROUP BY filiere )
WHERE niveau = 4 AND au = 2022 AND moy >= avgmoy ;

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

-- Les étudiants qui ont la moyenne max de la filiere en 4 2022


SELECT *
FROM etudiant NATURAL JOIN inscription JOIN filiere a ON filiere=id
WHERE au = 2022
AND moy = ( SELECT MAX(moy)
FROM inscription JOIN filiere b ON filiere=id
WHERE au = 2022 AND b.dept = a.dept);

E. Zemmouri – ENSAM Meknès 9


-- Partie 5. Modification

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

-- Suppression des tables


DROP TABLE etudiant;
DROP TABLE filiere;
DROP TABLE inscription;

E. Zemmouri – ENSAM Meknès 10

You might also like