Plan du cours:
Le langage de requêtes:
- TP tableur sur les prix Nobels. Opérations de recherche, filtre et tri sur une table: Lien
- Cours langage SQL et TD sur une base de données de prenoms: Lien
La structuration des données:
- Bases de données, règles pour construire une BDD en plusieurs tables, TP sur la creation d’une BDD cinéma (Base de Libre Office): Lien
- Problèmes d’intégrité, modele entité-relation (2): Lien, cours pdf et exercices
- SGBD, gestion de l’accès concurentiel, Lien
Travaux pratiques
- TP requêtes sur une table de prenoms: Lien
- TP sur la gestion d’une base de données de romans de sciences fiction, utilisant SQLite Browser
- TP sur le langage SQL avec des requetes sur une base de données. Différents thèmes sont proposés : Lien
- enquete de police
- villes du monde
- séries Netflix
- exoplanètes
- TP sur la creation d’un serveur avec gestion d’un formulaire en python/SQL: page 6
Travaux pratiques en SQL
(cours en ligne, ou version en pdf)
Traiter au choix l’un des sujets suivants. Au démarrage, représenter le schéma relationnel de la database. Répondre aux questions. Puis créer par vous même 5 nouvelles questions sur la base de données, auxquelles vous répondrez avec l’instruction SQL correspondante. Mettez vos reponses dans un fichier
base.txt
que vous placerez à la racine de votre dossierdevoirs/tixidor
Exemple: Pour la base de données ci-dessous, le schéma relationnel est:
rôle((#idFilm,int),(#idActeur,int),(nomRole,varchar))
films(idFilm,int),(titre,varchar),(annee,int),(idRealisateur,int),(resume,text),(codePays,varchar))
notes((#idFilm,int),(#email,varchar),(nom,varchar),(prenom,varchar),(#codePays,varchar))
pays((code,varchar),(nom,varchar),(langue,varchar))
artistes((idArtiste,int),(nom,varchar),(prenom,varchar),(anneeNaiss,int))

schema de la base de données films
On peut imaginer comme question sur cette base de données: Quel est l’acteur qui a joué dans les films qui ont obtenu les meilleurs notes?
Pays, villes et langues parlées
Exercice sur le langage SQL rédigés par N. Revéret sur forge.apps.education.fr. Interface en ligne.
Base de données Netflix
Exercice sur le langage SQL rédigés par N. Revéret sur forge.apps.education.fr
Murder Party à SQL City

retrouvez le meurtrier grâce aux bases de données de la police
-
Pour le TP guidé: Aller à la ressource sur mystery.knightlab.com et suivre les instructions.
-
Le fichier sql-murder-mystery.db: peut être télechargé pour une utilisation en local avec dbBrowserSQLite. Le projet peut être directement consulté sur Github .
-
Pensez à prendre des notes au fur et à mesure de votre avancée dans l’enquête.

schema de la base de données murders
Aide:
-
Observez bien le Diagramme Entité Relation de cette base de données. Vous pourrez y lire le schéma relationnel de ces tables. Les clés primaires sont indiquées avec une clé jaune et les clés étrangères avec une flèche bleue.
-
La relation entre tables est indiquée par une flèche.
-
La liste des tables peut être obtenue avec:
SELECT name
FROM sqlite_master
where type = 'table';
- Pour obtenir la liste des 10 premières entrées de la table
crime_scene_report
:
SELECT * FROM crime_scene_report
LIMIT 10;
-
La clause
WHERE
permet d’ajouter un filtre à votre requête. Elle est suivie d’une condition, par exemple:WHERE city = 'SQL City'
. -
Lire le rappel sur les wildcards par exemple
'P%'
pour obtenir les noms qui commencent parP
. Remplacer alors le signe=
parLIKE
dans la clauseWHERE
.
base de données exoplanetes.db
Principe
Nous allons utiliser un script Python pour nous connecter à la base de données exoplanetes.db
et tester quelques requêtes en langage SQLite.
Nous utiliserons la librairie sqlite3
de Python.
Il est conseillé d’utiliser l’IDE Spyder pour editer et interpréter les scripts écrits en Python.
La base de données doit être téléchargée ici : exoplanetes.db

extrait de la base de données
Script de base
import sqlite3
try:
conn = sqlite3.connect('exoplanetes.db')
cur = conn.cursor()
print("Base de données crée et correctement connectée à SQLite")
sql = "SELECT sqlite_version();"
cur.execute(sql)
res = cur.fetchall()
print("La version de SQLite est: ", res)
except sqlite3.Error as error:
print("Erreur lors de la connexion à SQLite", error)
cur.close()
conn.close()
print("La connexion SQLite est fermée")
La suite du TP à la page: python et BDD