Exercice 3 - Partie B · Bac Numérique et Sciences Informatiques Suède 2024 (jour 2)
Thème : Bases de données relationnelles, SGBD et langage SQL · Tiré du sujet Jour 2 (2024)
Énoncé
EXERCICE 3
Cet exercice porte sur la programmation Python (listes...), le traitement de données en table et les bases de données relationnelles.
Les deux parties sont indépendantes.
Partie A
Un trail est une course à pied en milieu naturel.
Une trace (ou trace GPS) est une liste d’au moins deux positions géographiques représentant un parcours.
Dans cet exercice, on souhaite réaliser un programme qui produit des statistiques intéressantes à partir d’une trace de trail.
La trace d’une course est stockée dans un fichier au format csv. Chaque ligne du fichier contient, dans cet ordre, la latitude en degrés Nord, la longitude en degrés Est (tous deux des nombres à virgule) puis l’altitude en mètres, et enfin une valeur d’horodatage ou timestamp (tous deux des entiers).
Voici un extrait typique de fichier csv:
46.03494, 7.09953, 1457, 1689008478
46.03522, 7.09947, 1447, 1689008481
46.03588, 7.09885, 1440, 1689008484
46.03635, 7.09819, 1439, 1689008487
46.03695, 7.09812, 1433, 1689008490
... La lecture du fichier est effectuée par le programme Python suivant (il n’est pas nécessaire de comprendre ce code pour pouvoir faire le sujet):
import csv
def lecture_trace_csv(filename):
"""
Prend une chaîne de caractère (nom du fichier) en entrée
et renvoie une liste contenant les données lues
"""
tab_trace = []
with open(filename, 'r') as f:
csvreader = csv.reader(f, delimiter=',')
for ligne in csvreader:
tab_trace.append(ligne)
return tab_trace Ce code peut être utilisé ainsi:
>>> tab_trace = lecture_trace_csv('track.csv')
>>> print(tab_trace)
[['46.03494', '7.09953', '1457', '1689008478'],
['46.03522', '7.09947', '1447', '1689008481'],
['46.03588', '7.09885', '1440', '1689008484'],
['46.03635', '7.09819', '1439', '1689008487'],
['46.03695', '7.09812', '1433', '1689008490']] La variable tab_trace est donc une liste contenant des listes de quatre chaînes de caractères.
Partie B
Des fichiers csv et les différentes fonctions écrites précédemment sont utilisés pour alimenter une base de données relationnelle. Cette base ne contient qu'une relation, nommée trails, dont voici un échantillon (les dénivelés sont en mètres, la distance est en kilomètres, et le temps est en heures):
Relation trails
id
lieu
dist
temps
denivele_p
denivele_n
1
Mont Blanc
21.3
3
1919
1898
5
Saint Pardoux
24
2
40
40
2
Mont Blanc
171
30
10000
10000
6
Ile de Ré
92
7.5
320
320
...
...
...
...
...
...
8.
Donner le résultat de la requête suivante dans le cas où la relation ne contient que les quatre enregistrements ci-dessus:
SELECT lieu, dist FROM trails WHERE denivele_p > 1000;
9.
Donner la requête SQL permettant d'obtenir uniquement les id et les lieux (colonne lieu) des trails dont la distance dépasse 50 km.
10.
On suppose que si les dénivelés positifs et négatifs sont égaux, alors la course est une balade parfaite. En utilisant cette idée, donner une requête SQL permettant d'afficher le lieu et la distance, et uniquement cela, de toutes les courses qui ne sont pas des balades parfaites.
11.
Donner la requête SQL affichant la distance cumulée de tous les trails dont le dénivelé cumulé positif est supérieur à 1000 m (sur l'échantillon de tableau ci-dessus, la réponse serait 192.3).
N.B.: on rappelle que si c est une colonne d'une relation contenant des données numériques, la requête suivante: SELECT sum(c) FROM rel renvoie la somme des valeurs figurant dans la colonne c de la relation rel.

Corrigé
Corrigé proposé par AprenAI (non officiel)
8. Donner le résultat de la requête suivante dans le cas où la relation ne contient que les quatre enregistrements ci-dessus : SELECT lieu, dist FROM trails WHERE denivele_p > 1000;
Réponse : ('Mont Blanc', 21.3) ('Mont Blanc', 171)
9. Donner la requête SQL permettant d'obtenir uniquement les id et les lieux (colonne lieu) des trails dont la distance dépasse 50 km.
Réponse : ```sql SELECT id, lieu FROM trails WHERE dist > 50; ```
Les réponses des 2 questions restantes et l’explication pas à pas sont réservées aux membres Premium. Premium
Résous-le ici : correction automatique, indices et corrigé détaillé.