Initiation aux bases de données et à la programmation événementielle Cours N 3 : Langage de Manipulation de Données. Souheib BAARIR. Page web : http://pagesperso-systeme.lip6.fr/souheib.baarir/bdvba/support.htm E-mail : souheib.baarir@u-paris10.fr Université Paris Ouest Nanterre la Défense. 1
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 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. 3
Insertion : exemples (1/2) étudiants N étudiant Nom Prénom formation 105230 MARTIN Marie MMIA 105234 BERNARD Louis Gestion 105237 THOMAS Alice Anglais 105239 MARTIN Bernard Anglais 105250 MARIE Philippe Gestion 105211 Mounier Alice Gestion Ajouter l étudiant DUPOND Jean, dont le N étudiants 105389 et de la formation Droit, à la table étudiant 105389 DUPOND Jean Droit INSERT INTO étudiant VALUES (105389,"DUPOND","Jean", " Droit") 4
Insertion : exemples (2/2) étudiants N étudiant Nom Prénom formation 105230 MARTIN Marie MMIA 105234 BERNARD Louis Gestion 105237 THOMAS Alice Anglais 105239 MARTIN Bernard Anglais 105250 MARIE Philippe Gestion 105211 Mounier Alice Gestion 105389 DUPOND Droit 105400 DUPONT Droit 105255 THOMAS Droit N étudiant étudiants-droit Nom 105389 DUPOND 105400 DUPONT 105255 THOMAS Valeurs non renseignées. NULL. 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 5
Modification : syntaxe 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 6
Modification : exemples (1/2) étudiants N étudiant Nom Prénom formation 105230 MARTIN Marie MMIA 105234 BERNARD Louis Eco-Gestion 105237 THOMAS Alice Anglais 105239 MARTIN Bernard Anglais 105250 MARIE Philippe Eco-Gestion 105211 Mounier Alice Eco-Gestion Renommer, dans la table étudiants, la formation Gestion en Eco-Gestion. UPDATE étudiants SET formation="eco-gestion" WHERE formation="gestion" 7
Modification : exemples (2/2) Vol ville départ ville arrivée heure départ Paris Boston 10:00:00 09:00:00 Berlin Rome 15:00:00 14:00:00 Londres Paris 18:00:00 17:00:00 Bruxelles Moscou 14:00:00 13:00:00 Alger Paris 16:00:00 15:00:00 Paris New York 04:00:00 03:00:00 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]) 8
Suppression : syntaxe 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! 9
Suppression : exemple Vol ville départ ville arrivée heure départ Paris Boston 09:00:00 Berlin Rome 14:00:00 Londres Paris 17:00:00 Bruxelles Moscou 13:00:00 Alger Paris 15:00:00 Paris New York 03:00:00 Supprimer tous les enregistrements dont la ville d arrivée est Paris. DELETE FROM Vol WHERE [Ville arrivée]= "Paris" 10
Exercice : BD Aéroport 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 30000 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? 11
BD Aéroport : étapes à suivre 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. 12
BD Aéroport : Ajouter le nouveau pilote, Mr Gérard LE GRAND, à la table Pilote. INSERT INTO Pilote VALUES "P0025","LE GRAND", "Gérard", 30000 Pilote Code pilote Nom prénom Nombre heures Depuis Antoine 20000 P0002 Simon Georges 7000 P0003 François Luc 35000 P0004 André George 40000 P0005 MouKhtari Youcef 25000 P0006 Arthur Georges 60000 P0007 Mathieu François 9500 P0008 Laurent Luc 14500 P0009 Mounier Alexandre 1200 P0010 Petit bernard 13000 P0025 LE GRAND Gérard 30000 13
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" Vol Code Vol ref pilote V0001 V0002 V0003 V0004 V0005 V0006 V0007 V0008 V0009 V0010 P0005 P0025 P0007 P0003 P0025 P0005 P0007 P0002 P0025 P0005 Pilote Code pilote Nom prénom Nombre heures Depuis Antoine 20000 P0002 Simon Georges 7000 P0003 François Luc 35000 P0004 André George 40000 P0005 MouKhtari Youcef 25000 P0006 Arthur Georges 60000 P0007 Mathieu François 9500 P0008 Laurent Luc 14500 P0009 Mounier Alexandre 1200 P0010 Petit bernard 13000 P0025 LE GRAND Gérard 30000
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) 2 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] Pilote Vol Code pilote Nom prénom Nombre heures Code Vol ref pilote Depuis Antoine 20000 V0001 P0005 P0002 Simon Georges 7000 V0002 P0007 V0003 V0004 P0003 V0005 V0006 V0007 V0008 V0009 V0010 P0005 P0007 P0002 P0005 P0003 François Luc 35000 P0004 André George 40000 P0005 MouKhtari Youcef 25000 P0006 Arthur Georges 60000 P0007 Mathieu François 9500 P0008 Laurent Luc 14500 P0009 Mounier Alexandre 1200 P0010 Petit bernard 13000 P0025 LE GRAND Gérard 30000 15
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) 2 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] NTable Code Vol ref pilote V0001 P0005 V0002 P0007 V0003 V0004 P0003 V0005 V0006 V0007 P0005 P0007 Code pilote Nom prénom Nombre heures P0005 MOUKHTARI Youcef 25000 P0007 Mathieu François 9500 Depuis Antoine 20000 P0003 François Luc 35000 Depuis Antoine 20000 P0005 MOUKHTARI Youcef 25000 P0007 Mathieu François 9500 V0008 P0002 P0002 Simon Georges 7000 V0009 V0010 P0005 Depuis Antoine 20000 P0005 MOUKHTARI Youcef 25000 16
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) 2 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" NTable Code Vol ref pilote Code pilote Nom prénom Nombre heures V0001 P0005 P0025 P0005 MOUKHTARI Youcef 25000 V0002 P0007 P0007 Mathieu François 9500 V0003 Depuis Antoine 20000 V0004 P0003 P0003 François Luc 35000 V0005 Depuis Antoine 20000 V0006 V0007 P0025 P0005 P0007 P0005 MOUKHTARI Youcef 25000 P0007 Mathieu François 9500 V0008 P0002 P0002 Simon Georges 7000 V0009 V0010 P0025 P0005 Depuis Antoine 20000 P0005 MOUKHTARI Youcef 25000 17
BD Aéroport : Supprimer l enregistrement concernant Mr Youcef MOUKHTARI de la table Pilote. DELETE FROM Pilote WHERE nom="mr MouKhtari" Pilote Code pilote Nom prénom Nombre heures Depuis Antoine 20000 P0002 Simon Georges 7000 P0003 François Luc 35000 P0004 André George 40000 P0005 MouKhtari Youcef 25000 P0006 Arthur Georges 60000 P0007 Mathieu François 9500 P0008 Laurent Luc 14500 P0009 Mounier Alexandre 1200 P0010 Petit Bernard 13000 P0025 LE GRAND Gérard 30000 18