Syst`eme d`informations et Bases de données (M24
Transcription
Syst`eme d`informations et Bases de données (M24
Système d’informations et Bases de données (M24) TD3 - SQL : création de tables et premières requêtes D2PC [email protected] Exercice 1: Nous souhaitons créer une base permettant de gérer des données sur des pilotes, des avions et des vols. Pour ce faire, nous allons débuter avec une interface graphique intitulée SQL designer. Rendez vous sur ondras.zarovi.cz/sql/demo/ Sur cette interface, on a une zone où l’on peut insérer des tables (zone centrale) et une zone de menus située sur la droite. Quand Ajouter Table (Add table) est sélectionné, nous pouvons insérer des tables en cliquant sur un point de la zone centrale. Nous allons démarrer avec une table PILOTE une table AVION et une table VOL. Une fois qu’une table est crée, elle apparaı̂t à l’écran et nous pouvons l’éditer. Nous allons éditer nos tables précédentes et ajouter des champs (Add field ). Pour ajouter un champ, il faut cliquer sur la table où l’on souhaite ajouter ce champ Pour chaque modification effectuée, valider par entrée. Nous cherchons à obtenir la structure suivante : – PILOTE (NUMPIL, NOMPIL, ADRESSE, SALAIRE) – AVION (NUMAV, NOMAV, CAPACITE, LOCALISATION) – VOL (NUMVOL, #NUMPIL, #NUMAV, VILLE DEP, VILLE ARR, H DEP, H ARR) NB : penser à choisir les bons types pour chaque champ. Par exemple, NUMPIL et SALAIRE seront des entiers (INT) mais NOMPIL et ADRESSE sont des chaı̂nes de caractères (Char). Nous pouvons modifier les champs en les sélectionnant et en choisissant Edit Field. Nous pouvons modifier l’ordre des champs en sélectionnant un champ et en utilisant le bouton Up ou Down. Nous avons une base de données que nous pouvons sauvegarder avec le menu correspondant. Mous allons l’enregistrer dans un fichier pour pouvoir l’utiliser ultérieurement. Pour le format, nous choisissons SQL. Menu Save puis Generate SQL. Copier-coller le contenu (en intégralité !) de la zone de texte située sous Input/Output dans un fichier texte (bloc note windows de préférence). Le sauvegarder sur votre espace personnel. Voyez le fonctionnement de l’instruction CREATE TABLE. Observez dans les dernières lignes le fonctionnement de l’instruction INSERT. Remarquez que VALUES est suivi d’une série vide. Exercice 2: L’interface utilisée à l’exercice précédent permet de créer rapidement une base de données mais pas de la manipuler. Pour manipuler, nous allons utiliser les fonctionnalités de phpMyAdmin en nous rendant sur demo.phpmyadmin.net/master-config/ Nous allons pouvoir importer la base précédemment crée. 1 Avec le menu de gauche, nous créons une Nouvelle Base de Données que nous appellerons NOMPRENOM (avec votre nom et votre prénom de manière à ce que chacun manipule sa propre base). La base ainsi créée apparaı̂t dans le menu de gauche. Une fois cette base créée, nous importons notre base précédente en utilisant dans la barre de menu du haut la fonction importer et en choisissant le format SQL. Si l’importation a bien fonctionné, nous disposons désormais d’une base manipulable. Nous allons insérer des données dans cette base à l’aide du menu insertion. Remplissez les champs de la table pilote pour ajouter : – Un pilote nommé Jean, habitant à Caen et gagnant 20000 – Un pilote nommé Pierre, habitant à Paris et gagnant 10000 NB : remarquez que PhpMyAdmin vous donne la requête SQL correspondant à l’opération effectuée. Copiez-collez cette requête dans un fichier texte à part. Allez dans le menu SQL de la barre du haut. Modifiez la requête précédente pour ajouter : – Un pilote nommé Gaël, habitant à Nice et gagnant 15000 – Kévin, pilote de Paris qui gagne 20000 Retournons dans le menu Insérer pour ajouter à notre base : – Un avion Boeing 737 d’une capacité de 300 places et situé à Caen Déduisons en la syntaxe pour ajouter, par le menu SQL cette fois : – Un avion Boeing 747 d’une capacité de 400 places et situé à Paris – Un avion Airbus A320 d’une capacité de 360 places et situé à Nice – Et deux avions de votre choix Allez dans la table AVION et supprimer un des deux avions que vous avez ajouté. Une fois encore, PhpMyAdmin vous donne la requête utilisée. Exploitez cette requête pour effacer le second avion que vous avez créé. En modifiant la requête qui a permis d’insérer des pilotes, insérez en utilisant le menu données suivantes : SQL les – VOL (1, 1, 2, Caen, Nice, 18, 20) – VOL (2, 1, 2, Nice, Paris, 19, 21) – VOL (3, 2, 3, Nice, Paris, 18, 20) – VOL (4, 3, 1, Caen, Paris, 8, 9) – VOL (5, 3, 3, Caen, Paris, 7, 8) NB : Si ça ne vous paraı̂t pas clair, réutilisez le menu insérer pour vérifier la syntaxe Exercice 3: À partir de notre base nous allons maintenant vouloir effectuer des requêtes. Vérifier que votre base a bien la structure suivante : – PILOTE (NUMPIL, NOMPIL, ADR, SAL) – AVION (NUMAV, NOMAV, CAP, LOC ) – VOL (NUMVOL, #NUMPIL, #NUMAV, VILLE DEP, VILLE ARR, H DEP, H ARR) En parcourant la table, notez sur votre feuille sous forme de tableau les données des différentes tables. Ceci nous permettra de vérifier que nos requêtes donnent les résultats escomptés. NB : ne pas oublier d’indiquer les entêtes des colonnes (les attributs) poiur plus de lisibilité. À l’aide du menu rechercher (barre du haut), effectuez les requêtes permettant d’obtenir les résultats suivants, enregistrez la requête et son résultat dans vos notes : 2 1. la liste des avions dont la capacité est supérieure à 350 passagers ; 2. la liste des pilotes qui gagnent moins de 16000 ; 3. la liste des vols dont la ville de départ est Caen ; 4. la liste des vols dont la ville de départ est Caen et la ville d’arrivée Paris ; 5. les numéros et noms des avions localisés à Nice. Essayez à partir du même menu d’obtenir – les numéros des pilotes en service et les villes de départ de leurs vols ? En algèbre relationnel, les requêtes 1 et 5 seraient écrites comme suit : – R1.1 = Sélection (AVION / CAP > 350) – R2.1 = Sélection (AVION / LOC = ’NICE’) – R2.2 = Projection (R2.1 / NUMAV, NOMAV) Nous aurons besoin de cette syntaxe pour faciliter la formulation de requêtes plus complexes Nous souhaiterions ensuite effectuer quelques requêtes plus complexes, avant toute chose essayons de passer par l’algèbre relationnelle pour faciliter la traduction. Ici, en plus des opérations de Sélection et de Projection, vous aurez besoin de l’intersection et de la jointure. Écrivez en algèbre relationnelle les requêtes permettant d’avoir : 1. le nom des pilotes domiciliés à Paris dont le salaire est supérieur à 15000 euros ? 2. la liste des vols au départ de Nice allant à Paris après 18 heures ? 3. le numéro des vols effectués au départ de Nice par des pilotes Niçois ? 4. les vols effectués par un avion qui n’est pas localisé à Nice ? 5. les pilotes (numéro et nom) assurant au moins un vol au départ de Nice avec un avion de capacité supérieure à 300 places ? Ce n’est pas forcément évident, prenez votre temps. Si vous avez trouvé ou si vous êtes vraiment perdu, les réponses figurent page suivante. 3 1. le nom des pilotes domiciliés à Paris dont le salaire est supérieur à 15000 euros ? – R5.1 = Sélection (PILOTE / ADR = ’PARIS’) – R5.2 = Sélection (R5.1 / SAL > 15000) – R5.3 = Projection (R5.2 / NOMPIL) 2. la liste des vols au départ de Nice allant à Paris après 18 heures ? – R6.1 = Sélection (VOL / VILLE DEP = ’NICE’) – R6.2 = Sélection (VOL / VILLE ARR = ’PARIS’) – R6.3 = Sélection (VOL / H DEP > 18.00) – R6.4 = Intersection (R6.1, R6.2) – R6.5 = Intersection (R6.3, R6.4) 3. le numéro des vols effectués au départ de Nice par des pilotes Niçois ? – R7.1 = Sélection (PILOTE / ADR = ’NICE’) – R7.2 = Jointure (R7.1, R6.1 / NUMPIL = NUMPIL) R6.1 générée pour Q6 – R7.3 = Projection (R7.2 / NUMVOL) 4. les vols effectués par un avion qui n’est pas localisé à Nice ? – R8.1 = Sélection (AVION / LOC ! = ’NICE’) – R8.2 = Jointure (VOL, R8.1 / NUMAV = NUMAV) – R8.3 = Projection (R8.2 / NUMVOL, VILLE DEP, VILLE ARR) 5. les pilotes (numéro et nom) assurant au moins un vol au départ de Nice avec un avion de capacité supérieure à 300 places ? – R9.1 = Sélection (AVION / CAP > 300) – R9.2 = Jointure (R6.1, R9.1 / NUMAV = NUMAV) (R6.1 figurant plus haut) – R9.3 = Jointure (R9.2, PILOTE / NUMPIL = NUMPIL) – R9.4 = Projection (R9.3 / NUMPIL, NOMPIL) Si vous êtes arrivé ici, félicitations ! Maintenant essayons de traduire ces requêtes en SQL. 4