0% found this document useful (0 votes)
62 views10 pages

TP SQL Etudiants Corrige 2023-10-30

This document contains the corrected exercises of a database course. It includes SQL queries to retrieve data from relational databases and covers topics like: - Selecting data from single tables - Filtering with conditions like WHERE and operators - Joining multiple tables - Grouping and aggregation with functions like COUNT, AVG, MAX - Having conditions to filter grouped data

Uploaded by

Sel Ma
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
62 views10 pages

TP SQL Etudiants Corrige 2023-10-30

This document contains the corrected exercises of a database course. It includes SQL queries to retrieve data from relational databases and covers topics like: - Selecting data from single tables - Filtering with conditions like WHERE and operators - Joining multiple tables - Grouping and aggregation with functions like COUNT, AVG, MAX - Having conditions to filter grouped data

Uploaded by

Sel Ma
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 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