C2 Bases de données et SQL
Activités
Activité 1 : Un peu d'histoire et de théorie
En utilisant la vidéo ci-dessus et en faisant vos propres recherches sur le Web, répondre aux questions suivantes :
- Quel mathématicien est à l'origine de la théorie des bases de données ? En quelle année ?
- Avant l'avènement des bases de données, les données étaient stockés sous la forme de simples fichiers, quels étaient les inconvénients de ce fonctionnement ?
- Que signifie l'absence de redondance pour une base de données ?
- Que signifie l'indépendance logique pour une base de données ?
- Que signifie l'intégrité pour une base de données ?
- Donner les noms de quelques sgbd connus en indiquant s'il s'agit de logiciels libres ou propriétaires.
Remarques
- Le sgbd utilisé dans le cadre de ce cours est sqlite, accompagné de son interface graphique DB Browser for sqlite. Ces logiciels sont libres, gratuits et multiplateformes.
- La création de base de données ne figurant pas au programme de NSI en terminale, on travaille avec des bases déjà crées. Cependant, le processus de création d'un base de données avec une seule table importée à partir d'un fichier
csv
est décrit dans cet exercice.
Activité 2 : Premier pas en SQL
-
Préparation
-
Télécharger la base de données des médailles olympiques de 1976 à 2008 et la sauvegarder dans le répertoire de votre choix : Médailles Olympiques 1976-2008 Cette base de donnée est composée d'une seule table :
Medals Id
INTEGER
City
TEXT
Year
INTEGER
Sport
TEXT
Discipline
TEXT
Event
TEXT
Athlete
TEXT
Gender
TEXT
Country_code
TEXT
Country
TEXT
Event_Gender
TEXT
Medal
TEXT
-
Lancer DB Browser for sqlite (depuis un terminale avec la commande
sqlitebrowser
ou via le menu des applications) et ouvrir la base de données téléchargée ci-dessus. Effectuer une sauvegarde dans le dossier de votre choix. - Dans le menu
Edition > Préférences
, mettre le logiciel en français. - Dans le menu
Vue
, décocherjounal SQL
,Graphique
, ...
-
-
Cliquer sur l'onglet
Exécuter le SQL
, la fenêtre qui apparaît est divisée en trois sections :
En haut, la zone où on entre les requêtes SQL.
Au milieu les données renvoyées par la requête
En bas, des informations sur le temps d'exécution ou les erreurs éventuelles Par exemple, sur l'illustration précédente, on a entré la requête :Tester chacune des requêtes suivantes en observant bien les résultats renvoyés. En déduire quelles données sont extraites de la base à l'aide de ces requêtesSELECT * FROM Medals
-
SELECT * FROM Medals WHERE Year=2008 AND Country="FRANCE";
-
SELECT City, Year, Athlete FROM Medals WHERE Medal="Gold" and Event="110m hurdles";
-
SELECT Athlete, Event FROM Medals WHERE Medal="Gold" AND Country="France" AND Year=2000 ORDER BY Athlete ASC;
-
SELECT DISTINCT Country FROM Medals where Medal="Gold" and YEAR="1984" ORDER BY Country DESC;
-
SELECT Athlete, City, Year, Medal, country FROM medals where country LIKE "%nia";
Aide
N'hésitez pas à faire vos propres tests en modifiant légèrement ces requêtes ou à en tester d'autres pour comprendre.
-
-
Ecrire les requêtes SQL permettant d'extraire de cette base de données les informations suivantes :
- Les noms de tous les athlètes français ayant obtenu une médaille d'or aux jeux olympiques de 1984.
- Les noms de tous les champions olympiques du marathon de 1976 à 2008.
- Les épreuves dans lesquelles le champion de natation américain Michael Phelps a obtenu des médailles en 2004.
- Tous les athletes médaillés entre 1976 et 2008 dont le nom contient "Richardson". Le handballeur d'origine réunionnaise Jackson Richardson devrait bien sûr y figurer !
Activité 3 : Opérations sur les colonnes
- Télécharger les données présentées dans la vidéo précédente sous la forme d'une base de données :
Dette et Croissance et l'ouvrir à l'aide de
sqlitebrowser
. Cette base est composée d'une seule table :RR Id
INTEGER
Country
TEXT
Year
INTEGER
DebtToGDP
REAL
Growth
REAL
DebtCategory
INTEGER
DebtToGDP
: la dette en pourcentage du pib.
Growth
: la croissance. - Quelques requêtes pour s'échauffer
- Vérifier comme indiqué dans la vidéo que les données contiennent bien 20 pays. Les lister.
- Vérifier aussi que les années vont de 1946 à 2009 comme indiqué dans la vidéo.
- Lister par ordre croissant les dix années où la croissance a été la plus faible en France.
- Lister les pays où la croissance a dépassé 15 %
-
Des opérations sur les colonnes
- Ecrire une requête sql permettant d'obtenir le pays et l'année où la dette a été la plus importante.
- Vous avez normalement écrit une requête de classement par ordre décroissant associée à une clause
LIMIT
. En réalité on recherche ici le maximum d'une colonne, le langage sql permet d'opérer sur des colonnes :
MIN
etMAX
permettent d'obtenir respectivement le maximum ou le minimum d'un champ.
SUM
permet de calculer la somme sur un ensemble d'enregistrement.
AVG
permet de calculer la moyenne sur un ensemble d'enregistrement.
COUNT
permet de compter le nombre d'enregistrement.
Exécuter la requête :
SELECT MAX(DebtToGDP) FROM RR
Quelle différence constatez-vous par rapport à la solution précédente ?
-
En vous aidant de ces nouvelles fonctionnalités, retrouver à l'aide de sqln les vraies valeurs de croissance moyenne en fonction de la catégorie de dette dans laquelle se trouve le pays et qu'on rappelle ci-dessous :
Catégorie Croissance moyenne 1 4,2 % 2 3,1 % 3 3,2 % 4 2,2 % -
Pour aller plus loin ...
Les opérations sur les colonnes sont particulièrement utiles en lien avec la clause GROUP BY
. Par exemple, si on souhaite obtenir la somme de la croissance pour chacun des 20 pays depuis 1970 :
SELECT country, SUM(Growth) from RR WHERE Year>=1970 GROUP BY Country
On peut même renommer la colonne SUM(Growth)
des résultats grâce à AS
et donc l'utiliser comme critère de classement:
SELECT country, SUM(Growth) AS moy70 from RR WHERE Year>=1970 GROUP BY Country ORDER BY moy70 DESC
Ecrire une seule requête permettant d'obtenir les taux de croissance moyenne pour chacune des catégories de dette.
Attention
La clause GROUP BY
n'est pas exigible au niveau terminale NSI et ne fera pas partie des évaluations.
Cours
Vous pouvez télécharger une copie au format pdf du diaporama de synthèse de cours présenté en classe :
Attention
Ce diaporama ne vous donne que quelques points de repères lors de vos révisions. Il devrait être complété par la relecture attentive de vos propres notes de cours et par une révision approfondie des exercices.
Exercices
Exercice 1 : Modélisation d'une base de données de livres
Pour mettre en place une base de données dans une médiathèque; on décide de stocker les livres dans une table de cette base. On donne ci-dessous la représentation de cette table avec simplement deux éléments donnés en exemple :
Titre | Auteur | Pays | Année |
---|---|---|---|
Les misérables | Victor Hugo | France | 1862 |
1984 | George Orwell | Angleterre | 1949 |
- Quels sont les attributs de cette table ?
- Proposer un type et un domaine pour l'attribut
Année
- Certains livres sont achetés en plusieurs exemplaires dans cette médiathèque, expliquer pourquoi le modèle de table choisi ci-dessus ne convient plus et proposer une correction.
Exercice 2 : Modélisation d'une liste de contacts téléphoniques
Proposer une modélisation d'une liste de contact téléphonique dans laquelle chaque personne (nom, prénom) est associée à un numéro de téléphone.
Exercice 3 : Prix Nobel
- Télécharger ci-dessous une base de données des Prix Nobel : Prix Nobel
- Ouvrir cette base avec
sqlitebrowser
- Dans Parcourir les données prendre note du noms des colonnes et de leur signification.
- Ecrire les requêtes sql permettant :
- d'obtenir les catégories dans lesquelles sont attribuées les prix Nobel,
- de lister par ordre alphabétique les lauréats du prix Nobel nés en France ou travaillant pour une organisation Française,
- de lister les années où le "Comité international de la Croix Rouge" a obtenu le prix Nobel,
- de connaître le nombre de femmes ayant obtenu un prix Nobel,
- de lister par âge décroissant les lauréats du prix Nobel qui sont toujours en vie,
- de rechercher les lauréats dont le nom contient "Curie".
Exercice 4 : Tremblements de terre
- Télécharger ci-dessous une base de données des tremblements de terre : Tremblements de terre
- Ouvrir cette base avec
sqlitebrowser
- Dans Parcourir les données prendre note du noms des colonnes et de leur signification.
-
Ecrire les requêtes sql permettant :
- de lister tremblements de terre qui se sont produits au Japon,
-
de lister les tremblements de terre qui se sont produits en l'an 2000 classés par magnitude,
Aide
Remarquer que le champ
occured_on
qui indique la date est au format texte.
-
Utiliser cette base pour répondre aux questions suivantes :
-
les tremblements de terre sont-ils plus fréquents dans l'hémisphère nord ou l'hémisphère sud ?
Aide
On rappelle que l'hémisphère nord correspond à une latitude positive et le sud à une latitude négative.
-
Où étaient effectuées les essais nucléaires français ?
-
L'un des séisme de cette base de données s'est-il produit à proximité de l'île de la Réunion ?
Aide
Rechercher la latitude et la longitude de l'île de Réunion et considérer que "à proximité" signifie qu'on s'écarte de moins de 10 degrés de latitude ou de longitude
-
Exercice 5 : Exercices en ligne
Des exercices en lignes de requêtes sur une seule table crées par N. Reveret. Ces exercices peuvent être faits à la maison (aucune installation nécessaire) et les réponses sont fournis.
Exercice 6 : Titanic
- Consulter la page wikipedia consacrée au Titanic pour connaître l'histoire tragique de ce paquebot.
- Télécharger ci-dessous une base de données partielle des passagers du titanic :
Passagers du titanic
On précise la signification des champs suivants :
survived
: un entier qui vaut 0 (passager décédé) ou 1 (passager survivant).
pclasse
: un entier qui indique la classe dans laquelle voyageait le passenger : de 1 pour la première classe à 3 pour la classe la moins chère.
sibsp
: le nombre de frères et soeurs présents à bord.
parch
: le nombre de parents et enfants présents à bord. - En argumentant vos réponses à l'aide d'informations extraites de cette base, donner votre avis sur les affirmations suivantes :
- Les passengers de la première classe avaient plus de chance de survie.
- Les femmes et les enfants ont été sauvées en priorité.
- Les passenger âgés de plus de 50 avaient moins de chance de survie que les autres.
Exercice 7 : Créer une base de données à partir d'un fichier csv
Remarque
La création de base de données est hors programme et ne fera donc pas l'objet d'évaluations. Cependant, on présente ici la création d'une base de données composée d'une seule table que l'on importera à partir d'un fichier csv
. Ce format de fichier a été vu en classe de première (voir le chapitre correspondant).
- Télécharger le fichier
csv
d'indicateurs de réussite des lycées sur data.gouv.fr. Par souci de simplification, renommer le fichier enlycees.csv
. - Lancer DB Browser for sqlite (depuis un terminale avec la commande
sqlitebrowser
ou via le menu des applications). Mettre le logiciel en français. Sélectionner Nouvelle base de données dans la barre de menu supérieur. Nommer votre base de donnéeslycees.db
et l'enregistrer dans le dossier de votre choix. Refermer l'interface qui apparaît ensuite (fenêtre édition de la définition de la table) et qui permet de créer les tables, nous allons simplement importer une table au formatcsv
. - Aller dans le menu
Fichier > Importer > Table depuis un fichier csv
, sélectionner alors le fichierlycees.csv
téléchargé précédemment (par défaut seul les fichiers texte s'affichent, changer l'option en bas et à droite de la fenêtre de sélection de fichiers). - Nommer la table
indicateurs
et régler les options d'importations comme dans la fenêtre ci-dessous . Puis sauvegarder votre base de données sous le nomlycees.db
. - Dans l'onglet
structure de la base de données
, cliquer sur la tableindicateurs
puis sur Modifier une table. Certaines données ont été importées au format text et d'autres au format integer. Les taux de réussites devraient être des valeurs numériques entières, est-ce bien le cas ? sinon corriger.
Attention
Attention lors du traitement des données à vérifier sous quel format elles ont été importées ! C'est une source d'erreur fréquente, par exemple classer par ordre décroissant des données en pensant qu'elles sont numériques alors qu'elles sont au format texte ne donnera sûrement pas le résultat escompté.