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.

Énoncé: Exercice 3 - Partie B · Bac Numérique et Sciences Informatiques Suède 2024 (jour 2)

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