0% ont trouvé ce document utile (0 vote)
266 vues3 pages

Requêtes SQL et Optimisations pour Randonnées et Participants

Le document contient la description de nombreuses requêtes SQL portant sur des tables de participants à des randonnées, des informations sur les randonnées et les sorties effectuées. Il présente également des requêtes de mise à jour et de création de vues sur ces tables.

Transféré par

Ilyes Bahfir
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
266 vues3 pages

Requêtes SQL et Optimisations pour Randonnées et Participants

Le document contient la description de nombreuses requêtes SQL portant sur des tables de participants à des randonnées, des informations sur les randonnées et les sorties effectuées. Il présente également des requêtes de mise à jour et de création de vues sur ces tables.

Transféré par

Ilyes Bahfir
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

corrigé TP 1:

Révision: Requêtes SQL

participant(idParticipant, nomParticipant, ville, age)


randonnee(idRando, nomRando, region, distance, denivele, suiteRando)
sortie(idRando, idParticipant, dateSortie, dureeSortie)

Exprimez en SQL les requêtes suivantes:


1. Les informations sur les randonnées (12 tuples)
SELECT * FROM Randonnee;
2. L'identiant et le nom des randonnées de plus de 20 kms. (4 tuples)
SELECT * FROM Randonnee WHERE distance > 20;
3. Les participants âgés entre 35 et 50 ans. (2 tuple)
SELECT * FROM participant WHERE age BETWEEN 35 AND 50;
4. Les randonnées qui ont une suite. (3 tuples)
SELECT * FROM Randonnee WHERE suiteRando IS NOT NULL;
5. Les informations sur les randonnées ainsi que sur la randonnée qui suit. (3 tuples)
SELECT * FROM Randonnee r1, Randonnee r2 WHERE [Link] = [Link];
6. Les participants de moins de 50 ans et leurs éventuelles sorties (18 tuples)
SELECT * FROM participant LEFT OUTER JOIN Sortie ON [Link] = [Link]
WHERE age < 50;
7. Les participants qui ont fait une randonnée de plus de 1000 mètres de dénivelé (avec jointure). (6 tuples)
SELECT DISTINCT p.* FROM participant p, Randonnee r, Sortie s WHERE [Link] = [Link]
AND [Link] = [Link] AND [Link] > 1000;
8. Les participants qui ont fait une randonnée de plus de 1000 mètres de dénivelé (avec sous-requête). (6
tuples)
SELECT DISTINCT p.* FROM participant p, Sortie s WHERE [Link] = [Link] AND
[Link] = ANY(SELECT idRando FROM Randonnee WHERE denivele > 1000);
9. Les participants qui n'ont jamais fait de sorties (avec sous-requête). (2 tuples)
SELECT p.* FROM participant p WHERE idparticipant NOT IN (SELECT idparticipant FROM Sortie);
SELECT p.* FROM participant p WHERE [Link] != ALL (SELECT idparticipant FROM Sortie);
SELECT p.* FROM participant p WHERE NOT EXISTS (SELECT * FROM Sortie s WHERE [Link]
= [Link]);
10. Les participants qui vivent dans une ville contenant 'an' et qui font des randonnées (avec sous-requêtes).(2
tuples)
SELECT * FROM participant p WHERE ville LIKE '%an%' AND EXISTS (SELECT * FROM Sortie
WHERE [Link] = [Link]);
11. randonnées qui n'ont jamais été faite par un participant (avec sous requête )
SELECT [Link], nomRando FROM Randonnee r WHERE [Link] NOT IN (SELECT DISTINCT
idRando FROM Sortie);
SELECT [Link], nomRando FROM Randonnee r WHERE NOT EXISTS (SELECT * FROM Sortie
WHERE [Link] = [Link]);

1
12. Le participant le plus âgé (avec sous-requête).
SELECT p1.* FROM participant p1 WHERE [Link] >= ALL (SELECT [Link] FROM participant p2);
13. La sortie la plus longue (avec sous-requête).
SELECT * FROM Sortie WHERE dureeSortie >= ALL (SELECT dureeSortie FROM Sortie);
14. les participants qui ont fait des sorties en 2011 et 2012. (3 tuples)
SELECT DISTINCT p1.* FROM participant p1, Sortie s1 WHERE [Link] = [Link]
AND EXTRACT(YEAR FROM dateSortie) = 2011
AND [Link] IN (SELECT [Link] FROM participant p2, Sortie s2 WHERE [Link]
= [Link] AND EXTRACT(YEAR FROM dateSortie) = 2012);
15. les participants qui ont fait des sorties en 2011 ou 2012. (7 tuples)
(SELECT DISTINCT p1.* FROM participant p1, Sortie s1 WHERE [Link] = [Link]
AND EXTRACT(YEAR FROM dateSortie) = 2011)
UNION (SELECT p2.* FROM participant p2, Sortie s2 WHERE [Link] = [Link] AND
EXTRACT(YEAR FROM dateSortie) = 2012);
16. le nombre total des participants.
SELECT count(*) FROM participant ;
17. l'age moyen des participants.
SELECT avg(age) FROM participant; (réponse= 38,6)
18. la distance maximale des randonnées.
SELECT max(distance) FROM randonnee; (réponse= 35)
19. acher le nombre de randonnées de la région de Blida.
SELECT count(*) FROM randonnee WHERE region='Blida' (reponse=2)
20. acher le nombre de randonées eectuées par région.
SELECT region, count(*) FROM Randonnee GROUP BY region ;
21. la sortie la plus récente.
SELECT max(datesortie) FROM sortie
22. le nombre de sorties eectuées par jour
SELECT count(*) FROM sortie GROUP BY datesortie
23. le nombre de sorties eectuées par an
SELECT extract (year FROM datesortie) as an,count(*) as nb_sortie FROM sortie GROUP BY extract
(year FROM datesortie)
24. le nombre de randonnées eectuées par les participants
SELECT nomparticipant,count([Link]) FROM participant p, Randonnee r, Sortie s WHERE
[Link] = [Link] AND [Link] = [Link] GROUP BY [Link]
25. les participants qui ont fait une seule randonnée (1 tuple)
SELECT p.* FROM Participant p, Sortie s WHERE [Link] = [Link] GROUP BY id-
Participant HAVING COUNT(*) = 1;
26. La distance totale parcourue par chacun des participants ordonnée par distance décroissante
SELECT p.*, SUM(distance) AS distanceParcourue
FROM Participant p LEFT OUTER JOIN Sortie s ON [Link] = [Link] LEFT OUTER
JOIN Randonnee r ON [Link] = [Link]
GROUP BY idParticipant ORDER BY distanceParcourue DESC;

2
27. Le pourcentage de sortie en fonction des regions, trié par pourcentage
SELECT region, round(count(*)/(SELECT count(*) FROM sortie)*100) || '%' as pourcentage FROM
sortie, randonnee WHERE [Link] = [Link]
GROUP BY region ORDER BY count(*)/(SELECT count(*) FROM sortie)*100
28. Les randonnées (dénies par leurs identiants et leurs noms) ainsi que le nombre de randonnée qui sont à
l'origine
SELECT idrando, nomrando, level-1 "Nombre de suite" FROM randonnee WHERE suiterando is not null
start WITH suiterando is null connect by suiterando = prior idrando ORDER BY idrando ;

Mise à jour des tables


1. Mettre en majuscule tous les noms des participants
UPDATE participant SET nomparticipant=upper(nomparticipant)
2. Modier la ville du participant GHAZALI par Tlemcen
UPDATE participant SET ville='Tlemcen' WHERE nomparticipant='GHAZALI' ou bien(UPDATE par-
ticipant SET ville='Tlemcen' WHERE idparticipant='9')
3. Mettre à jour les randonnee qui n'ont pas de suite par la valeur 0
UPDATE randonnee SET suiterando='0' WHERE suiterando is null
4. Ajouter un nouveau champ pays à la table randonnee et mettre à jour la colonne par la valeur ALGERIE
ALTER TABLE randonnee add pays varchar(20)UPDATE randonnee SET pays='ALGERIE'
5. Ajouter deux contraintes d'intégrité permettant de garantir que la distance des sorties ainsi que l'age des
participants soient strictement positifs.
ALTER TABLE randonnee ADD CONSTRAINT c_distance check (distance >0)
ALTER TABLE participant ADD CONSTRAINT c_age check (age >0)

Création des vues


1. Créer une vue contenant les participants de moins de 50 ans.
CREATE VIEW part50 as SELECT * FROM participant WHERE age<50;
2. Créer une vue contenant les noms des participants de moins de 50 qui ont fait une randonnée à Tizi Ouzou
(utiliser la vue précédemment créé)
CREATE VIEW part50tizi as SELECT nomparticipant FROM part50,sortie,randonnee WHERE [Link]
= [Link] AND [Link] = [Link] AND [Link]= 'Tizi Ouzou'

Vous aimerez peut-être aussi