Vous êtes sur la page 1sur 3

Informatique générale - 2eme semestre - Spécialité AGRAL3/MTX3

TP4 : requêtes SQL


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.

Téléchargement :
Nous utiliserons la même base que pour le TP3 aussi vous n'avez pas à faire d'importation dans
phpMyAdmin. Si vous avez supprimé les tables à la fin du TP3, suivez à nouveau la procédure
d'importation. Sinon, vous pouvez l'ignorer. Téléchargez le fichier
http://webia.lip6.fr/~lepape/ens/infogen2/tourdefrance_mysql.sql Créer un nouveau fichier
texte tp4_nom1_nom2.sql, où nom1 et nom2 sont les logins du binôme. Ouvrez-le
avec un éditeur de texte.

Connexion :
Connectez-vous à l’interface phpMyAdmin en tapant l’url suivante dans un navigateur :
https://pc69.polytech.upmc.fr/phpMyAdmin/
Votre login est le même que sous linux et votre mot de passe, c’est votre login.

Importation :
Nous allons importer dans phpMyAdmin une bases de données à partir du fichier sql téléchargé.
A partir de phpMyAdmin, cliquez sur votre unique base dans le menu de gauche puis dans le
menu de droite, cliquez sur l’onglet « Importer ». Dans l’encart « Fichier à importer », cliquer sur
« Parcourir » et sélectionner le fichier tourdefrance.sql. Cliquez sur « Exécuter ».

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,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.

Vérifier que l’importation s’est bien déroulée en visualisant la base de données puis le contenu de
chaque table.

Partie 1 : Tour de France suite (exercice corrigés, 2h)

Les requêtes qui portent sur plusieurs tables doivent être éditées à partir du menu de la
base elle-même.
Sélectionnez la base dans le menu de gauche et cliquez dans l’onglet « SQL » dans les
onglet en haut.

1
Informatique générale - 2eme semestre - Spécialité AGRAL3/MTX3

1. Group by, having


a. 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. Compléter la
requête en ne gardant que les coureurs dont le temps effectué pour chaque
étape est supérieur à 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 ?
b. Récupérez le code et le nom des pays ayant plus d'un coureur, classé par ordre
alphabétique croissant des noms de pays
c. Récupérez le nom des coureurs dont le temps total (somme du temps mis pour
chaque étape) est inférieur à 3h30, classé par temps total croissant

2. Requêtes imbriquées
a. Récupérez le nom des joueurs qui n'ont pas couru l'étape 2 ? Que signifie la
réponse ?
b. Récupérez 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
c. Récupérez le nom et le temps du dernier coureur arrivé pour chaque étape
d. Récupérez les coureurs qui n'ont pas gagné (autrement dit tous les coureurs
sauf le premier) pour chaque étape ?
e. Récupérez le 2ème meilleur temps pour l'étape 1 en utilisant le fait qu'il n'y a
aucun ex aequo (les temps sont tous uniques)
f. Même question en ne présumant d'aucune unicité sur les temps
g. Récupérez le top 3 des coureurs pour chaque étape
h. Récupérez un classement décroissant des équipes avec le temps d'une équipe
pour une étape donnée défini comme étant la somme du temps mis par les 2
meilleurs coureurs de l'équipe pour l'étape considérée
i. Même question où le temps d'une équipe pour une étape donnée est défini
comme étant la moyenne du temps mis par les 2 meilleurs coureurs de l'équipe
pour l'étape considérée

3. Question bonus
Quel est l'intérêt d'utiliser une base de données ?
Note : Imaginez devoir répondre aux mêmes questions en utilisant des tableaux dans
votre tableur préféré

2
Informatique générale - 2eme semestre - Spécialité AGRAL3/MTX3

Partie 2 : (exercice à rendre, 1h)

Importation :
Téléchargez les fichiers
http://webia.lip6.fr/~lepape/ens/infogen2/geographie_mysql1.sql.bz2
http://webia.lip6.fr/~lepape/ens/infogen2/geographie_mysql2.sql.bz2 et
http://webia.lip6.fr/~lepape/ens/infogen2/geographie_mysql3.sql.bz2 et importez les dans
l'ordre en suivant la procédure donnée dans la première partie. Pour supprimer les tables
commencez par supprimer les clés étrangères, et ensuite les tables. Le schéma de la base
que vous venez d’importer est :

• REGIONS (id_region, nom_reg, nb-hab_reg, superficie_reg, metrop)


• DEPARTEMENTS (id_dep, num_dep, nom_dep, prefecture*, region*, nb-
hab_dep, superficie_dep)
• CANTONS (num_can, nom_can, nb-hab_can)
• COMMUNES (id_insee, postal, nom_com, id_dep*, nb-hab_com,
superficie_com)
• REPART (num_can*, num_com*)

où :
¾ num_com est une clé étrangère qui référence id_insee dans la table communes
¾ prefecture est une clé étrangère qui référence id_insee dans la table communes
¾ region est une clé étrangère qui référence id_region dans la table regions

Vous placerez vos requêtes SQL dans le fichier texte tp4partie2_nom1_nom2.sql, où


nom1 et nom2 sont les logins du binôme.

Écrivez les requêtes vous permettant d'obtenir les informations suivantes :

1. Les cantons ayant le même nom


2. Le nombre de département par canton, pour les régions ayant une densité de
population supérieure à 300, ordonné par le nom des régions
3. Les départements dont la densité de population est plus grande que celle de leur
région (en utilisant IN)
4. Les communes ayant une population plus importante qu'un département (en utilisant
ANY)
5. Les cantons dont le nom est également le nom du département (en utilisant EXISTS)
6. Le département ayant la plus faible densité

Soumission du TP

Soumettre votre fichier tp4_nom1_nom2.sql à l’adresse de votre chargé de TD en


précisant le sujet suivant : [infogen2] tp4 nom1 nom2.