Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
| tc_info:tp9 [2019/01/06 23:24] – edauce | tc_info:tp9 [2019/05/27 21:37] (Version actuelle) – fschwander | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| + | |||
| + | |||
| + | ====== TP 9 : SQL ====== | ||
| + | |||
| + | |||
| + | |||
| + | Nous allons travailler sur une base de données '' | ||
| + | |||
| + | Le schéma relationnel de la base est le suivant : | ||
| + | * **Membre** (__IdMembre__, | ||
| + | * **Biblio** ( __IdBiblio__, | ||
| + | * **Livre** (__IdLivre__, | ||
| + | * **Emprunt** (// | ||
| + | |||
| + | avec : | ||
| + | |||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | Les attributs ou groupes d’attributs soulignés (resp. en italique) correspondent aux clés primaires (resp. étrangères) des relations. | ||
| + | |||
| + | Type des attributs : | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | ====Partie 1==== | ||
| + | |||
| + | === Executer sqlite3 === | ||
| + | Pour travailler sur sqlite3 et y créer une base de données '' | ||
| + | |||
| + | sqlite3 biblio.db | ||
| + | |||
| + | |||
| + | === Fichier source === | ||
| + | Le fichier {{https:// | ||
| + | |||
| + | Téléchargez ce fichier, et mettez-le dans votre dossier de travail. | ||
| + | |||
| + | Dans un premier temps, ouvrez-le sous geany pour regarder son contenu. Il commence par 4 commandes '' | ||
| + | |||
| + | Ensuite nous avons les 4 '' | ||
| + | |||
| + | === Lecture du fichier source === | ||
| + | |||
| + | Revenez dans le terminal : | ||
| + | |||
| + | Lancer sqlite3 et tapez '' | ||
| + | |||
| + | Si tout se passe bien, sans erreur : | ||
| + | |||
| + | sqlite> | ||
| + | sqlite> | ||
| + | |||
| + | === Schéma de la base === | ||
| + | |||
| + | Maintenant vous pouvez | ||
| + | la commande '' | ||
| + | |||
| + | sqlite> | ||
| + | | ||
| + | Vous pouvez également vérifier la structure des tables avec '' | ||
| + | |||
| + | sqlite> | ||
| + | |||
| + | === Requêtes et commandes d' | ||
| + | |||
| + | L' | ||
| + | |||
| + | Pour afficher le contenu d'une table, exécutez la requête | ||
| + | |||
| + | sqlite> SELECT * FROM Livre ; | ||
| + | | ||
| + | <note tip> | ||
| + | * Les requêtes SQL se terminent par un point virgule '';'' | ||
| + | * Les commandes d' | ||
| + | </ | ||
| + | |||
| + | * Recommencez après avoir exécuté la commande '' | ||
| + | * Faites de même avec les commandes : | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | <note tip> | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | </ | ||
| + | |||
| + | === Insertion de valeurs === | ||
| + | |||
| + | Les commandes d' | ||
| + | |||
| + | <code sql> | ||
| + | INSERT INTO Membre VALUES (2, ' | ||
| + | </ | ||
| + | |||
| + | <code sql> | ||
| + | INSERT INTO Livre VALUES (' | ||
| + | </ | ||
| + | |||
| + | <code sql> | ||
| + | INSERT INTO Livre VALUES (' | ||
| + | </ | ||
| + | |||
| + | <code sql> | ||
| + | INSERT INTO Biblio VALUES (77, NULL, ' | ||
| + | </ | ||
| + | ====Partie 2==== | ||
| + | |||
| + | Voici pour vous entraîner une série de requêtes à effectuer sur la base. | ||
| + | Il est recommandé de mettre ces requêtes dans un fichier '' | ||
| + | |||
| + | 1. Liste des auteurs présents dans la base. | ||
| + | |||
| + | 2. Liste des livres | ||
| + | |||
| + | 3. Liste des livres de Victor Hugo appartenant à la catégorie 5 (Théâtre). | ||
| + | |||
| + | 4. Liste des livres de Jacques Prévert ou de Gilbert Sinoué. | ||
| + | |||
| + | 5. Liste des membres n’habitant pas à Marseille. | ||
| + | |||
| + | 6. Liste des livres (titre, auteur) empruntés au moins une fois. | ||
| + | |||
| + | 7. Liste des livres jamais empruntés. | ||
| + | |||
| + | 8. Liste des membres qui ont emprunté Ruy Blas. | ||
| + | |||
| + | 9. Liste des livres empruntés par des habitants du 8ème arrondissement de Marseille. | ||
| + | |||
| + | 10. Quels sont les livres qui ont été empruntés au cours de la période allant du 16/01/10 au 15/06/10? | ||
| + | |||
| + | 11. Donner la liste des livres se trouvant à St Charles ou à République. | ||
| + | |||
| + | 12. Quels sont les numéros des membres qui ont emprunté au moins un livre à Marseille pour une durée supérieure ou égale à 7 jours ? | ||
| + | |||
| + | 13. Donner la liste des membres (nomMembre) qui n'ont pas emprunté ' | ||
| + | |||
| + | 14. Donner la liste des membres (nomMembre) qui ont emprunté à la fois ‘Contes pour les enfants pas sages’ et ‘Avicenne’. | ||
| + | |||
| + | 15. Liste des membres (nomMembre) qui n'ont emprunté ni ‘Contes pour les enfants pas sages’, ni ‘Avicenne’. | ||
| + | |||
| + | 16. Quels sont les numéro et noms des membres qui ont emprunté au moins un livre écrit par Victor Hugo mais qui n’ont jamais emprunté de livre écrit par Jacques Prévert ? | ||
| + | |||
| + | 17. Donner le nombre de livres par auteur. | ||
| + | |||
| + | 18. Pour chaque catégorie de livre, donner le nombre de livres empruntés au moins une fois. | ||
| + | |||
| + | 19. Donner pour chaque livre (titreLivre, | ||
| + | |||
| + | 20. Donner la liste des livres (titreLivre, | ||
| + | |||
| + | 21. Donner les noms des membres qui ont emprunté plus de deux livres. | ||
| + | |||
| + | 22. Quels sont les nom et adresse complète des membres qui ont empruntés tous les livres de Victor Hugo ? | ||
| + | |||
| + | ==== Partie 3 ==== | ||
| + | |||
| + | L' | ||
| + | * La librairie '' | ||
| + | * La librairie '' | ||
| + | |||
| + | Nous allons maintenant essayer de " | ||
| + | |||
| + | Commencez par importer les librairies mentionnées : | ||
| + | |||
| + | <code python> | ||
| + | import sqlite3 | ||
| + | import pandas | ||
| + | </ | ||
| + | |||
| + | Déplacez le fichier '' | ||
| + | |||
| + | Essayez maintenant le commande d' | ||
| + | |||
| + | <code python> | ||
| + | db = sqlite3.connect(' | ||
| + | </ | ||
| + | | ||
| + | <note important> | ||
| + | Attention, si le fichier '' | ||
| + | </ | ||
| + | |||
| + | Pour pouvoir exécuter des requêtes dans la base, il faut créer un " | ||
| + | <code python> | ||
| + | c = db.cursor() | ||
| + | </ | ||
| + | Vous pouvez maintenant exécuter des requêtes à l'aide de ce curseur: | ||
| + | | ||
| + | | ||
| + | Il est conseillé d' | ||
| + | |||
| + | <code python> | ||
| + | try: | ||
| + | c.execute(" | ||
| + | except sqlite3.OperationalError: | ||
| + | print(" | ||
| + | </ | ||
| + | |||
| + | Une fois la requête exécutée sans erreur, les réponses sont disponibles à l'aide de la commande '' | ||
| + | |||
| + | <code python> | ||
| + | reponses = c.fetchall() | ||
| + | for r in reponses: | ||
| + | print(r) | ||
| + | </ | ||
| + | |||
| + | === Mise en forme avec pandas === | ||
| + | |||
| + | Les réponses apparaissent sous forme de tuples, ce qui manque un peu de lisibilité. Pour améliorer la mise en forme des résultats, nous utiliserons la librairie '' | ||
| + | |||
| + | <code python> | ||
| + | with db: | ||
| + | requete = " | ||
| + | reponse = pandas.io.sql.read_sql(requete, | ||
| + | print (reponse) | ||
| + | </ | ||
| + | | ||
| + | === A faire === | ||
| + | |||
| + | Reprenez les requêtes de la partie précédente, | ||
| + | |||