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