SI3-TP1-partie 2 mySQL.pdf - Google Drive

3 downloads 69 Views 896KB Size Report
Page 1 of 17. Sébastien GAGNEUR – TP1 – Partie 2 – ALSI – BTS IG1 1. TP1. Partie 2. ACCESS – ODBC - MySQL. Ob
TP1 Partie 2 ACCESS – ODBC - MySQL Objectifs du TP : • • • •

Utiliser un SGBDR MySQL à partir d’une machine distante (Windows ou MacOS). Utiliser un pilote ODBC (Open Database Connectivity) pour accéder à une base ACCESS et exporter les données sous MySQL. Créer une base de données sous MySQL. Exploiter une base de données sous MySQL, par l’intermédiaire de requêtes SQL.

Durée et modalités de travail : Ce TP se réalise individuellement sur des machines Windows. Les bases de données qui seront créées seront des bases distantes. La durée de ce TP est d’approximativement 4H00.

1. Le sujet Votre travail consiste à faire migrer une base de données sous ACCESS vers une base sous MySQL. Pour cela vous disposez d’une base de données MySQL vide (à votre nom) disponible sur le serveur MySQL du lycée. La base de données utilise les données suivantes (partie 1).

Table : Concert NumConc 1 2 3 4 5 6 7 8

DateConc 07/03/1989 08/03/1989 09/03/1989 10/03/1989 11/03/1989 12/03/1989 13/03/1989 14/03/1989

ProgConc Ouverture Chant Concertos Musique française Soirée Bach Lieder La création Cloture

DirConc Markowski Szostack Szostack Salanne Salanne Markowski Redel Redel

Sébastien GAGNEUR – TP1 – Partie 2 – ALSI – BTS IG1

NomLieu Basilique Basilique Cathédrale Abbaye Cathédrale Cathédrale Basilique Basilique

1

Table : Œuvre NumOeuv 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

NomOeuv Symphonie n°4 Magnificat Judas Maccabee Suite n°3 en ré majeur Concerto en mi majeur Exultate Jubilate Quatuor n° 1 en Ut mineur Cantique de Racine Tantum ergo Quatre motets Suite liturgique Concerto brandebourgeois n°4 Concerto brandebourgeois n°6 Cantate BWV 18 Cantate BWV 106 Cantate BWV 209 Shicksalslied La création Neuvième symphonie

CompOeuv Mahler JS Bach Haendel JS Bach JS Bach Mozart Fauré Fauré Fauré Poulenc Jolivet JS Bach JS Bach JS Bach JS Bach JS Bach Brahms Haydn Beethoven

FormOeuv Oeuvre Symphonique Oratorio Oratorio Concerto Concerto Oratorio Oeuvre Symphonique Oratorio Oratorio Fugue Oratorio Concerto Concerto Oratorio Oratorio Oratorio Lied Oratorio Oeuvre Symphonique

Sébastien GAGNEUR – TP1 – Partie 2 – ALSI – BTS IG1

NumConc 1 1 2 3 3 3 4 4 4 4 4 5 5 5 5 6 6 7 8

2

Table : Jouer NumOeuv 1 1 1 1 2 2 2 2 3 3 4 4 4 4 5 5 5 5 3 4 5

NumSol 1 2 4 5 6 2 4 5 6 7 8 9 10 11 1 3 4 5 2 2 2

Table : Lieu NomLieu Basilique Cathédrale Abbaye

DescLieu Basilique Saint Bernard Cathédrale Notre-Dame Abbaye de Cîteaux

Table : Place TypPlace Série 1 Série 2 Série 3 Série 4 Série 5 Tribune

DescPlace Assis au fond de la salle Assis au milieu de la salle Assis devant la scène Débout face à la scène Debout sur les cotés Tribune église

Sébastien GAGNEUR – TP1 – Partie 2 – BTS SIO

3

Table : Soliste NumSol 1 2 3 4 5 6 7 8 9 10 11 12 13 14

NomSol Teresa May Ursula Mitrega Jadmina Rappe Henr. Grychnik Rom. Tesarowitcz Del. Ambruziak Malf Tomalak Krit. Jakowicz Stefan Kamasa Andrej Orkisz Guy Teston Woot Coderkamm Gilah Yaron Frieder Lang

TypSol Soprano Soprano Alto Ténor Basse Soprano Violon Violon Alto Violoncelle Piano Basse Soprano Ténor

Table : Tarif NomLieu Basilique Basilique Basilique Basilique Basilique Basilique Cathédrale Cathédrale Cathédrale Cathédrale Cathédrale Abbaye Abbaye Abbaye Abbaye

TypPlace Série 1 Série 5 Série 2 Série 3 Série 4 Tribune Série 1 Série 2 Série 3 Série 4 Série 5 Série 1 Série 2 Série 3 Série 4

Visibilité VP

VP

VP SV

VP SV

Prix 100 15 70 50 25 150 150 100 70 50 25 100 70 50 25

Sébastien GAGNEUR – TP1 – Partie 2 – BTS SIO

4

VP : visibilité parfaite SV : sans visibilité 1. Récupération des données via ODBC, côté Windows Avec l’administrateur ODBC Windows, mettre en place un pilote ODBC sur votre base de données festival. 1.1.

Télécharger les pilotes ODBC pour MySQL, prendre la version 64 bits : téléchargement pilote ODBC pour MySQL,

La version 32 bits ne fonctionne pas en salle 3806. Pour l’installation vous faites une installation standard (Typical) dans le dossier par défaut : C:\Program Files\MySQL\Connector ODBC 5.3\ L’installation met à disposition des fichiers .dll 1.2.

Lancer l’outil de configuration ODBC :

1.3.

Lancer l’administrateur de sources ODBC :

Sébastien GAGNEUR – TP1 – Partie 2 – BTS SIO

5

Choisir Ajouter, et prendre dans la liste le driver ODBC, récemment installé.

Terminer Il faut paramétrer ensuite la connexion avec MySQL :

Sébastien GAGNEUR – TP1 – Partie 2 – BTS SIO

6

Le driver est maintenant présent dans la liste initiale, avec le data source name paramétré (test). C’est que vous retouverez dans Access.

Le travail est maintenant terminé sous Windows 2. Du côté d’ACCESS : Procédure d'exportation des données d'ACCESS vers MySQL Dans Access, au niveau d’une table, clic droit permet d’arriver au menu suivant : Sébastien GAGNEUR – TP1 – Partie 2 – BTS SIO

7

La source de données doit être sélectionner, dans cette liste doit figurer le pilote ODBC mis en place avec l’outil d’administration de Windows

Il faut valider sur avec OK, les données vous se retrouver sur votre base MySQL. Vous pouvez vérifier avec phpMyAdmin. 3. Environnement de travail 3.1. Pour l’accès extérieur (depuis chez vous) URL : http://sio.jbdelasalle.com/phpmyadmin sur le serveur DebianVM. L’accès au serveur DEBIAN, se fait avec login et mot de passe constitués de la première lettre de votre prénom, suivie de votre nom de famille. Le tout attaché sans espace, et EN MAJUSCULE. Pour les noms composés seule la première particule est utilisée, le reste est ignoré. Sébastien GAGNEUR – TP1 – Partie 2 – BTS SIO

8

Exemple : l’étudiant Sébastien GAGNEUR Utilisateur : SGAGNEUR Mot de passe : SGAGNEUR Exemple : l’étudiant Hervé DUMOULIN-DUPONT-DE-TARTARIN Utilisateur : HDUMOULIN Mot de passe : HDUMOULIN Le nom de votre base est basé sur le principe suivant : Exemple : l’étudiant Sébastien GAGNEUR sur le TP festival La base est : festival_SGAGNEUR 3.2. Au lycée Vous travaillez avec MySQLWorkBench, le serveur est : 192.168.153.102 port 3306. URL : http://192.168.153.102/phpmadmin sur le serveur DebianVM. L’identification est la même que pour un accès externe au serveur DebianVM. Le schéma à utiliser (nom de la base) est le même que pour l’accès externe.

4. Informations sur les requêtes Les alias fonctionnent très bien. Il suffit de faire suivre l’alias derrière la table avec un espace. Le préfixage des champs se réalise avec un point. Le format est « nom de la table.nom de la colonne ». L’imbrication suivante peut fonctionner. mysql> select nomlieu from concert where nomlieu in (select nomlieu from tarif A where A.prix = (select max(prix) from tarif B where A.nomli eu = B.nomlieu)) group by nomlieu; Cet exemple peut fonctionner uniquement avec la table tarif, ce qui permet de trouver le même résultat. Attention au niveau des jointures avec IN le SELECT suivant ne doit comporter qu’un seul champ. Il est impossible de faire afficher un champ d’une table si le nom de la table ne figure par dans la clause FROM qui suit l’affichage de la colonne. La clause EXISTS n’exige pas un nombre de champ particulier dans le SELECT qui suit cette clause. Un ou plusieurs champs ou * ne change rien. Donc en aucun cas utiliser EXISTS pour faire une jointure sur une colonne.

Sébastien GAGNEUR – TP1 – Partie 2 – BTS SIO

9

Si dans un SELECT avec une seule table on utilise une opération cela signifie qu’en résultat il n’y aura pas toutes les occurrences. Donc dans ce SELECT, il ne faut pas faire afficher une autre colonne sans utiliser la clause GROUP BY sur cette colonne. mysql> select nomlieu,max(prix) from tarif group by nomlieu; +----------------+-------------+ | nomlieu | max(prix) | +----------------+-------------+ | abbaye | 100 | | basilique | 150 | | cathédrale | 150 | +----------------+-------------+ 3 rows in set (0.00 sec) mysql> select max(prix) from tarif ; +--------------+ | max(prix) | +--------------+ | 150 | +--------------+ 1 row in set (0.00 sec) Les opérateurs MINUS, INTERSECT n’existent pas, UNIONS est disponible. Les requêtes SQL utilisent au niveau des chaînes de caractères les guillemets simples « ‘ » et doubles « ‘’ ». Ne pas utiliser les symboles = et dans le cas d’une recherche sur un modèle de chaînes avec le symbole %. Dans ce cas il faut utiliser la clause LIKE. Cette remarque vaut également pour le langage SQL en général. L’utilisation du symbole % supporte la substitution de 0 à un nombre arbitraire de caractères (maximum inconnu).

5. Les requêtes 1. Nom des solistes qui jouent un concerto. Vous trierez le résultat par ordre croissant sur le nom du soliste. En version 4.0, au temps où les requêtes imbriquées n’existaient pas ! mysql> select nomsol from soliste, jouer,oeuvre where soliste.numsol = jouer.numsol and jouer.numoeuv = oeuvre.numoeuv and formoeuv = 'concerto' order by soliste.nomsol ASC; En version 4.1, votre époque, où les requêtes imbriquées existent !

Sébastien GAGNEUR – TP1 – Partie 2 – BTS SIO

10

Résultats :

2. Liste des concerts dont la date est ultérieure à ceux qui se déroulent dans une abbaye

Une deuxième version est possible :

Résultats :

3. Liste des concerts où il y a des places sans visibilité Avec prédicat :

Sans prédicat :

Résultats : 4. Concert où il n'y a pas d’œuvre symphonique au programme Avec un prédicat : select NumConc, DateConc, Nomlieu from concert where NumConc ALL (select NumConc from oeuvre Avec un FormOeuv autre prédicat : where = 'oeuvre symphonique');

Sébastien GAGNEUR – TP1 – Partie 2 – BTS SIO

11

Sans prédicat :

Résultats :

5. Nom des solistes Alto ou Soprano

Résultats :

6. Liste des concerts avec numéro uniquement se déroulant dans une basilique.

Résultats :

7. Date et lieu des concerts dans lesquels joue un soliste dont le nom commence par ‘HENR’ : Requête avec imbrications de sous-requêtes :

Requête sans imbrication avec le même résultat que la précédente :

Résultats :

Sébastien GAGNEUR – TP1 – Partie 2 – BTS SIO

12

8. Pour chaque lieu de concert indiquer le tarif maximum d’une place Avec la table tarif uniquement : mysql> select nomlieu from tarif A where A.prix = (select max(prix) from tarif B where A.nomlieu = B.nomlieu);

À partir de la table concert : mysql> select nomlieu from concert where nomlieu in (select nomlieu from tarif A where A.prix = (select max(prix) from tarif B where A.nomlieu = B.nomlieu)) group by nomlieu;

Résultats :

9. Liste des concerts pour lesquels il y a au moins une œuvre symphonique Requête imbriquée sans prédicat :

Requête imbriquée avec prédicat :

Résultats :

10. Sélection des numéros de concerts avec la date et le lieu pour lequel le tarif d’une place est de 15 €.

Résultats :

11. Lieu de concert pour lesquels il y a au moins 3 oeuvres par concert Sébastien GAGNEUR – TP1 – Partie 2 – BTS SIO

13

Résultats :

12. Numéro des solistes qui jouent dans plusieurs œuvres.

Résultats :

13. Liste des solistes qui ne jouent pas d’œuvre Requête imbriquée sans prédicat :

Requête imbriquée avec prédicat :

Résultats :

14. Listes des œuvres qui ne sont pas jouées

Résultats :

15. Modification de la structure de la table œuvre Ajout du champ dateoeuv type date, et modification du champ nomoeuv type char(255) Sébastien GAGNEUR – TP1 – Partie 2 – BTS SIO

14

Afficher la description de la table oeuvre :

Remarque : il semble que la modification (clause MODIFY) de plusieurs champs en même temps soit impossible Enlever le champ dateoeuv que vous venez d’ajouter dans la table œuvre.

Afficher la description de la table oeuvre :

16. Renommer la table concert en table conc

Vérifier l’existence de la table conc :

17. Information de dernière minute : les concerts qui sont composés de deux œuvres sont dirigés uniquement par Bergmann

Vérifier votre mise à jour :

18. Augmentation du prix des places de 10% uniquement pour la tribune

Sébastien GAGNEUR – TP1 – Partie 2 – BTS SIO

15

Vérifier votre mise à jour :

19. Création de la table concert2 à partir de la table concert Attention, il est nécessaire de préciser la structure de la table concert2 (nature des champs et surtout la clé primaire pour qu’elle soit définie).

Affichage de la structure de la table concert2;

Affichage de toutes les occurrences de la table concert2 :

Tester maintenant l’ordre suivant : mysql> create table concert2 as select * from concert;

Affichage de la structure de la table concert2; mysql> describe concert2; Que constatez-vous ? (vous pouvez afficher la structure de la table concert à titre de comparaison)

20. Effacer seulement la ligne du concert numéro 1

Sébastien GAGNEUR – TP1 – Partie 2 – BTS SIO

16

21. Effacer toutes les lignes de la table concert Première solution :

Deuxième solution :

22. Effacer la table concert (données et définitions)

23. Création de la table soprano comportant la structure suivante Numsol int(10) identifiant, nomsol char(255), typsol char(255)

Afficher la description de la structure de la table soprano

Insérer des valeurs dans la table soprano : insérer les solistes de type soprano qui jouent uniquement dans deux œuvres différentes.

Afficher les occurrences de la table soprano :

Sébastien GAGNEUR – TP1 – Partie 2 – BTS SIO

17