Vous êtes sur la page 1sur 2

Université Tunis El Manar Niveau : 2LFIG

Faculté des Sciences Economiques et de Gestion de Tunis Matière : SGBD


Responsable du cours : F. Kboubi

TP – REQUETES SQL AVANCEES

Objectif – Le but de ce TP est d’écrire des requêtes SQL d’interrogation, de type SELECT FROM
WHERE en utilisant des constructions plus compliquées tel group by, having, et les requêtes
imbriquées.

Importation – Importer dans oracle la base de données à partir du fichier sql


tourdefrancev2_oracle.sql.

Le schéma de la base que vous venez d’importer est :

• EQUIPE(code,nom,directeur)
• PAYS(code,nom)
• COUREUR(num-dossart,code-equipe*,nom,code-pays*)
• ETAPE(num,date-etape,kms,ville-depart,ville-arrivee)
• TEMPS(num-dossart*,num-etape*,temps-realise)

Remarque – la table TEMPS ne stocke que les temps des joueurs qui ont participé à l’étape. Si
un coureur déclare forfait pour une étape, son temps n’apparait pas.

FONCTIONS D’AGREGATION (COUNT, SUM, MAX, MIN, AVG)


1. Donnez le meilleur et le pire temps de l’étape 1.
2. Donnez le nombre de coureurs de l’équipe 1.
3. Donnez nombre d’étapes et le temps total effectué par 'CHAVANEL Sylvain'.
4. Donnez la moyenne des distances de chaque étape.

GROUP BY, HAVING


1. Donnez le nombre d’étapes effectuées pour chaque coureur.
Compléter la requête en ordonnant les résultats par ordre croissant du nom des
coureurs.
Modifier la requête de sorte de ne considérer que les temps supérieurs à 2h.
Compléter la requête en ne gardant que les coureurs qui ont effectués au moins une
étape.
Quelle est la différence entre la clause WHERE et la clause HAVING ?
2. Donnez le code et le nom des pays ayant plus d'un coureur, ainsi que le nombre de
coureurs par pays, classé par ordre alphabétique croissant des noms de pays.

1
3. Donnez le nom des coureurs dont le temps total (somme du temps mis pour chaque
étape) est inférieur à 9h00, classé par temps total croissant.

REQUETES IMBRIQUEES
1. Donnez le nom des joueurs qui n'ont pas couru l'étape 2.
2. Donnez le nom des coureurs dont la première lettre de leur nom est identique à celle
d'un autre joueur (exemple : REICHL et ROUS) en utilisant EXISTS.
3. Donnez le nom et le temps du dernier coureur arrivé pour chaque étape
4. Donnez les coureurs qui n'ont pas gagné (autrement dit tous les coureurs sauf le
premier) pour chaque étape.
5. Donnez le 2ième meilleur temps pour l'étape 1 en utilisant le fait qu'il n'y a aucun ex aequo
(les temps sont tous uniques).
6. Même question en ne présumant d'aucune unicité sur les temps, sachant qu'on ne
cherche pas à laisser de rang vide.