Initiation aux bases de données et à la programmation événementielle Cours N°3 : langage de manipulation de données. Support de cours de Souheib BAARIR. Page web : pagesperso-systeme.lip6.fr/Souheib.Baarir/bdvba/support.htm Université Paris Ouest Nanterre la Défense
SQL : requêtes statistiques Plusieurs types de requêtes : d’interrogation. de manipulation. de définition : create, alter, drop… Le Langage de Manipulation de Données (LMD) de SQL est le langage permettant de modifier les informations contenues dans la base. Trois commandes de LMD de SQL : INSERT Ajout d’enregistrements. UPDATE Mise à jour (Modification) d’enregistrements. DELETE Suppression d’enregistrements. 2
Insertion : syntaxe 3 INSERT INTO table (champ 1,..., champ n ) VALUES (val 1,...,val n )ou INSERT INTO table (champ 1,..., champ n ) SELECT... table est le nom de la table sur laquelle porte l'insertion. champ 1,..., champ n est la liste des champs pour lesquelles on donne une valeur. –Cette liste est optionnelle. Si elle est omise, le SGBD prendra par défaut l'ensemble des champs de la table dans l'ordre où elles ont été données lors de la création de la table. –Si une liste de champs est spécifiée, les champs ne figurant pas dans la liste auront la valeur NULL.
Insertion : exemples (1/2) 4 étudiants N° étudiant NomPrénomformation MARTINMarieMMIA BERNARDLouisGestion THOMASAliceAnglais MARTINBernardAnglais MARIEPhilippeGestion MounierAliceGestion Ajouter l’étudiant DUPOND Jean, dont le N° étudiants et de la formation Droit, à la table étudiant INSERT INTO étudiant VALUES (105389,"DUPOND","Jean", " Droit") DUPONDJeanDroit
Insertion : exemples (2/2) 5 étudiants N° étudiant NomPrénomformation MARTINMarieMMIA BERNARDLouisGestion THOMASAliceAnglais MARTINBernardAnglais MARIEPhilippeGestion MounierAliceGestion N° étudiantNom DUPOND DUPONT THOMAS étudiants-droit Ajouter les étudiants de la table étudiants-droit à la table étudiants. INSERT INTO étudiants([N° étudiant],Nom,formation) SELECT [N° étudiant],Nom,"Droit" FROM étudiants-droit DUPONDDroit DUPONTDroit THOMASDroit Valeurs non renseignées. NULL.
Modification : syntaxe 6 UPDATE table SET champ 1 = exp 1,…,champ n = exp n [WHERE condition] table est le nom de la table sur laquelle porte la modification. champ 1,..., champ n est la liste des champs de table sur lesquels doivent porter les modifications. exp 1,..., exp n sont des expressions. condition est un prédicat classique de la clause WHERE
Modification : exemples (1/2) 7 étudiants N° étudiant NomPrénomformation MARTINMarieMMIA BERNARDLouisGestion THOMASAliceAnglais MARTINBernardAnglais MARIEPhilippeGestion MounierAliceGestion Renommer, dans la table étudiants, la formation Gestion en Eco-Gestion. UPDATE étudiants SET formation="Eco-Gestion" WHERE formation="Gestion" Eco-Gestion
Modification : exemples (2/2) 8 ville départville arrivéeheure départ ParisBoston09:00:00 BerlinRome14:00:00 LondresParis17:00:00 BruxellesMoscou13:00:00 AlgerParis15:00:00 ParisNew York03:00:00 Vol Décaler tous les départs d’une heure. Nous avons besoin d’une fonction particulière : DATEADD (type,nombre,champ), telle que, type : "h" pour heures, "n" pour minutes, "s" pour secondes, "m" pour mois, "y" pour années, "d" pour jours… UPDATE Vol SET [heure départ]=DATEADD("h",1, [heure départ]) 10:00:00 15:00:00 18:00:00 14:00:00 16:00:00 04:00:00
Suppression : syntaxe 9 DELETE FROM table [WHERE condition] table est le nom de la table sur laquelle porte la suppression. condition est un prédicat classique de la clause WHERE. ATTENSION : ici la clause WHERE est facultative. Si elle n'est pas précisée, tous les enregistrements de la table seront supprimés !
Suppression : exemple 10 ville départville arrivéeheure départ ParisBoston09:00:00 BerlinRome14:00:00 LondresParis17:00:00 BruxellesMoscou13:00:00 AlgerParis15:00:00 ParisNew York03:00:00 Vol Supprimer tous les enregistrements dont la ville d’arrivée est Paris. DELETE FROM Vol WHERE [Ville arrivée]= "Paris"
Exercice : BD Aéroport 11 Pilote(Code pilote, nom, prénom, nombre heures) Compagnie(Code Compagnie, nom, origine) Avion(Code Avion, type, capacite) Vol(Code Vol, Ville départ, Ville arrivée, heure départ, jour départ,heure arrivée, jour arrivée, ref pilote, ref avion, ref compagnie) Suite à la défection d’un des pilotes de la compagnie Air France, Mr Youcef MOUKHTARI, la compagnie à décider de recruter un nouveau pilote, Mr Gérard LE GRAND (code pilote : P0025) ayant une expérience de heures de vols, et de remplacer tous les vols devant être effectués par Mr MouKhtari, par Mr LE GRAND. Comment mettre à jour la BD Aéroport par ces informations ?
BD Aéroport : étapes à suivre… 12 Pilote(Code pilote, nom, prénom, nombre heures) Compagnie(Code Compagnie, nom, origine) Avion(Code Avion, type, capacite) Vol(Code Vol, Ville départ, Ville arrivée, heure départ, jour départ,heure arrivée, jour arrivée, ref pilote, ref avion, ref compagnie) 1. Ajouter le nouveau pilote, Mr Gérard LE GRAND, à la table Pilote. 2. Modifier la table Vol, en remplaçant la référence pilote concernant Mr Youcef MOUKHTARI, par la référence à Mr Gérard LE GRAND. 3.Supprimer l’enregistrement concernant Mr Youcef MOUKHTARI de la table Pilote.
BD Aéroport : Ajouter le nouveau pilote, Mr Gérard LE GRAND, à la table Pilote. 13 Code piloteNomprénomNombre heures P0001DepuisAntoine20000 P0002SimonGeorges7000 P0003FrançoisLuc35000 P0004AndréGeorge40000 P0005MouKhtariYoucef25000 P0006ArthurGeorges60000 P0007MathieuFrançois9500 P0008LaurentLuc14500 P0009MounierAlexandre1200 P0010Petitbernard13000 Pilote INSERT INTO Pilote VALUES "P0025","LE GRAND", "Gérard", P0025LE GRANDGérard30000
BD Aéroport : Modifier la table Vol, en remplaçant la référence pilote concernant Mr Youcef MOUKHTARI, par la référence à Mr Gérard LE GRAND (1/2) 1 ere Solution (la moins automatique) : Chercher (à la main) le code correspondant à Mr MOUKHTARI dans la table Pilote P0005. Pour la table Vol, écrire la requête qui modifie cette valeur, par celle de Mr LE GRAND (P0025). UPADTE Vol SET [ref pilote] ="P0025" WHERE [ref pilote] ="P0005" Code piloteNomprénomNombre heures P0001DepuisAntoine20000 P0002SimonGeorges7000 P0003FrançoisLuc35000 P0004AndréGeorge40000 P0005MouKhtariYoucef25000 P0006ArthurGeorges60000 P0007MathieuFrançois9500 P0008LaurentLuc14500 P0009MounierAlexandre1200 P0010Petitbernard13000 P0025LE GRANDGérard30000 Pilote Code Vol … ref pilote… V0001 … P0005 … V0002P0007 V0003P0001 V0004P0003 V0005P0001 V0006P0005 V0007P0007 V0008P0002 V0009P0001 V0010P0005 Vol P0025
BD Aéroport : Modifier la table Vol, en remplaçant la référence pilote concernant Mr Youcef MOUKHTARI, par la référence à Mr Gérard LE GRAND (2/2) 15 Code Vol … ref pilote… V0001 … P0005 … V0002P0007 V0003P0001 V0004P0003 V0005P0001 V0006P0005 V0007P0007 V0008P0002 V0009P0001 V0010P0005 Vol Code piloteNomprénomNombre heures P0005MOUKHTARIYoucef25000 P0007MathieuFrançois9500 P0001DepuisAntoine20000 P0003FrançoisLuc35000 P0001DepuisAntoine20000 P0005MOUKHTARIYoucef25000 P0007MathieuFrançois9500 P0002SimonGeorges7000 P0001DepuisAntoine20000 P0005MOUKHTARIYoucef eme Solution (la plus automatique) : Dériver une nouvelle table pour faire correspondre la référence pilote de Vol au code pilote de Pilote NTable = Vol INNER JOIN Pilote ON Vol.[ref pilote]= Pilote.[Code Pilote] Ecrire la requête qui modifie la référence correspondant à Mr MOUKHTARI par celle de Mr LE GRAND (P0025) de la relation, NTable, produite. UPADTE NTable SET [ref pilote] ="P0025" WHERE nom="Mr MouKhtari" Code piloteNomprénomNombre heures P0001DepuisAntoine20000 P0002SimonGeorges7000 P0003FrançoisLuc35000 P0004AndréGeorge40000 P0005MouKhtariYoucef25000 P0006ArthurGeorges60000 P0007MathieuFrançois9500 P0008LaurentLuc14500 P0009MounierAlexandre1200 P0010Petitbernard13000 P0025LE GRANDGérard30000 Pilote P0025 NTable
BD Aéroport : Supprimer l’enregistrement concernant Mr Youcef MOUKHTARI de la table Pilote. 16 Code piloteNomprénomNombre heures P0001DepuisAntoine20000 P0002SimonGeorges7000 P0003FrançoisLuc35000 P0004AndréGeorge40000 P0005MouKhtariYoucef25000 P0006ArthurGeorges60000 P0007MathieuFrançois9500 P0008LaurentLuc14500 P0009MounierAlexandre1200 P0010PetitBernard13000 P0025LE GRANDGérard30000 Pilote DELETE FROM Pilote WHERE nom="Mr MouKhtari"