Deuxième partie sur le langage SQL : les requêtes de modification du contenu des tables d'une base de données.
I. Présentation
1) Définition
Le langage de manipulation de données permet de modifier le contenu d'une table. Trois actions possibles :
- Ajouter des enregistrements ;
- Mettre à jour les données d'un ou plusieurs enregistrements ;
- Supprimer des enregistrement.
2) Modèle relationnel pour les exemples
Service (IdServ, NomServ, LieuServ)
- Clé primaire : Id_Serv
Employe (IdEmp, NomEmp, FonctionEmp, DateEmbaucheEmp, SalaireEmp, CommissionEmp, ServiceEmp, SuperieurEmp)
- Clé primaire : IdEmp
- Clé étrangère : ServiceEmp en référence à IdServ de Service
II. Insertion de données
1) L'instruction INSERT
INSERT INTO permet l'insertion de données, avec possibilité de préciser les colonnes. Le colonnes omises prendront la valeur NULL par défaut, et si aucune colonne n'est précisée, toutes les colonnes de la table doivent être affectées.
2) Insertion directe de valeurs
a) Présentation
INSERT INTO Nomtable [(champ1, champ2,...)]
VALUES (valeur1, valeur 2,...);
- Les valeurs sont séparées par des virgules.
- Quand les champs ne sont pas spécifiés à côté de la table, ils doivent tous être valorisés.
- Deux virgules qui se suivent correspondent à la non valorisation d'un champ (équivalent à NULL).
- Quand les champs sont spécifiés, ces derniers doivent être toujours valorisés.
b) Exemples
INSERT INTO Employe
VALUES (25381, "Toto", "Comptable", 15/06/2008, 24000 , , 30 , 16756);
INSERT INTO Employe(IdEmp, NomEmp, Fonction, DateEmbaucheEmp, SalaireEmp, ServiceEmp, SuperieurEmp)
VALUES (25381, "Martin", "Comptable", 15/06/2008, 24000, 30, 16756);
3) Insertion à partir d'une requête d'interrogation
a) Présentation
INSERT INTO Nomtable [(champ1, champ2,...)]
SELECT …
FROM …
[WHERE …
GROUP BY …
HAVING …
ORDER BY …];
- Utilisation de SELECT pour insérer plusieurs lignes puisque les enregistrement résultats d'une requête d'interrogation vont être ajoutés à la table
- L'instruction SELECT doit renvoyer le nombre exact de champs spécifiés dans l'instruction INSERT INTO (où le nombre total de champs de la table s'ils ne sont pas spécifiés).
- Possibilité d'insérer des constantes dans l'instruction SELECT de la sous requête.
b) Exemple
INSERT INTO Employe (IdEmp, NomEmp, ServiceEmp)
SELECT 48975, "Martin", IdServ
FROM Service
WHERE NomService = "Direction";
III. Modification de données
1) Présentation
UPDATE NomTable
SET Champ1 = Valeur 1, Champ2 = Valeur2,...
[WHERE condition];
- Mise à jour des valeurs d'un ou plusieurs champs d'un ou plusieurs enregistrements d'une table, désignée par l'instruction UPDATE.
- Modification(s) précisée(s) dans la clause SET grâce à une affectation de valeur, résultat d'une expression algébrique, d'une constante, ou du résultat d'une sous requête d'interrogation.
- Restriction éventuelle des enregistrements à modifier avec la clause WHERE.
2) Exemples
Déménagement du service numéro 10 à Laval :
UPDATE Service
SET LieuServ = "Laval"
WHERE NumServ = 10;
Augmentation de 100€ de tous les salaires annuels et de 50€ de toutes les commissions :
UPDATE Employe
SET SalaireEmp = SalaireEmp + 100 , CommissionEmp = CommissionEmp + 50;
IV. Suppression de données
1) Présentation
DELETE FROM NomTable
[WHERE condition];
- Suppression irréversible d'enregistrements avec DELETE d'une table précisée grâce à la clause FROM.
- Restriction éventuelle des enregistrements à supprimer avec la clause WHERE.
2) Exemple
Suppression de tous les administratifs du service n°30 :
DELETE FROM Employe
WHERE ServEmp = 30 AND FonctionEmp = "administratif";