La manipulation des données : Les requêtes d'actions bases de données Requete SQL Action : INSERT - UPDATE - DELETE
1 Introduction
2 Présentation du modèle du cours
3 La suppression des données
4 L'insertion des données
5 La mise à jour de données
1 Introduction
Le cours précédent nous a montré l'ensemble des moyens d'accéder aux données d'une base existante. Néanmoins, SQL ne se limite pas à l'interrogation d'une base. Ce chapitre nous permettra de voir de quelle manière mettre à jour, insérer et supprimer ces données, ce qui est définit par l'acronyme LMD(Langage de Manipulation des Données).
2 Présentation du modèle du cours
Pour les exemples nous nous appuierons sur le même modèle que le cours précédent :
VEHICULE (Code, Type, M arque, Puissance) => les types de véhicule
GARAGE (Code, Nom, Adresse, Ville, Cpostal, Marque) => les garages
PLAQUE (Immat, CodeV#, Nom, Prenom, Adresse, Ville, Cpostal, Date) => véhicules immatriculé
CodeV# de PLAQUE est clé étrangère et référence Code de VEHICULE.
Le jeu d’essai :
Table VEHICULE
Table GARAGE
Table PLAQUE
La représentation Type Access
3 La suppression des données
Cette suppression est assurée par la commande SQL DELETE. Cette commande permet d'effacer un ou plusieurs enregistrements.
La syntaxe est :
DELETE FROM <nom table> WHERE <condition> ;
La Clause WHERE permet d'effectuer une restriction sur les enregistrements à effacer.
Ex :
DELETE FROM GARAGE ;
Efface tous les enregistrements de la table GARAGE
DELETE FROM GARAGE
WHERE Marque = "Renault" ;
Efface tous les enregistrements de GARAGE dont la marque est Renault
Les clauses WHERE peuvent reprendre toutes les formes vues précédemment
Ex :
Effacer tous les enregistrements de la table véhicule qui sont immatriculés (Cela permet de ne garder dans la table VEHICULE que les véhicules disponibles) :
DELETE FROM VEHICULE
WHERE Code IN
(SELECT CodeV FROM PLAQUE) ;
Attention, cette requête est impossible du fait de l'intégrité référentielle CodeV de PLAQUE est référencé par Code de VEHICULE.
Il est par contre possible d'effacer les enregistrements non référencés dans la table PLAQUE :
DELETE FROM VEHICULE
WHERE Code NOT IN
(SELECT CodeV FROM PLAQUE) ;
4 L'insertion des données
4.1 Insertion simple :
Cette insertion est assurée par la commande SQL INSERT. Elle permet d'insérer de nouveaux enregistrements (un ou plusieurs) dans une table.
La syntaxe est :
INSERT INTO <nom_table> (liste champs) VALUES (liste valeurs)
o Liste champ : nom des champs pour lesquels on fournit une valeur. Inutile si on valorise tous les champs de la table.
o Liste valeurs : valeurs des champs figurant dans la liste des champs (même ordre). Les chaînes de caractères sont délimitées par des guillemets.
Ex :
Insertion dans la table Garage d'un enregistrement complet :
INSERT INTO GARAGE
VALUES ( 6, "Pere-noel", "chemin des Rennes", "Au pole",
"00000","Traineau");
Insertion dans la table Garage d'un enregistrement partiel en spécifiant les champs :
INSERT INTO GARAGE
(Code, Nom, Marque)
VALUES ( 7, "Un autre","BMW ");
Les champs peuvent également être spécifiés dans le désordre :
INSERT INTO GARAGE
(Marque, Nom, code)
VALUES ( "BMW ", "Un autre", 7);
Les champs non connus peuvent également être remplacés par la valeur Null
INSERT INTO GARAGE
VALUES (8, "Un autre",Null ,NullNull ,"BMW ");
4.2 Insertion multiple
L'insertion multiple consiste à insérer en une seule opération plusieurs enregistrements dans une table. Cette opération peut être réalisée de deux façons :
- Insertion multiple de valeurs :
INSERT INTO VEHICULE
VALUES (
(16, "Golf", "Volkswagen", 90),
(17, "Polo", "Volkswagen", 45),
(18, "Passat", "Volkswagen", 115)
);
Cette syntaxe ne fonctionne que sous de rare SGBDR (Oracle, ? ?), a seule solution étant alors d'exécuter plusieurs ordres Insert
- Insertion multiple à partir d'une commande Select. La syntaxe est alors :
INSERT INTO <nom_table> (liste champs) SELECT (requête SQL)
La requête SQL doit renvoyer les champs compris dans la liste des champs spécifiés. Si la li e des champs n'est pas spécifié, tous les champs de la table sont considérés.
Ex :
INSERT INTO PLAQUE (Immat, CodeV)
SELECT "Immat" & Code, Code FROM VEHICULE
WHERE Code NOT IN
(SELECT CodeV FROM PLAQUE);
Attention, la commande INSERT ne peut être utilisée pour mettre à jour un enregistrement. En cas d'utilisation sur un champ déjà référencé (clé existante), une erreur sera générée par le SGBDR.
5 La mise à jour de données
Cette mise à jour est assurée par la commande SQL UPDATE. Elle permet de mettre à jour un ou plusieurs champs dans un ou plusieurs enregistrements d'une table.
La syntaxe est :
UPDATE <nomtable>
SET <nomchamp1> = expr1, <nomchamp2> = expr2 …
[WHERE condiion]
o SET nomchamp = expr : permet de donner une nouvelle valeur à un champ, expr étant une constante, un autre attribut ou une expression numérique. Expr peut aussi être une commande SELECT entre parenthèse.
o WHERE condition : condition qui détermine les lignes auxquelles s‘appliquent la mise à jour.
Ex :
UPDATE VEHICULE
SET Puissance = Puissance*10;
UPDATE VEHICULE
SET Puissance = Puissance*10
WHERE Marque ="Renault";
Mise à jour de plusieurs attributs :
UPDATE VEHICULE
SET Puissance = Puissance*10, Marque = M arque & "*10"
WHERE Marque ="Renault";
UPDATE PLAQUE
SET Nom = UPPER(Nom); (UCASE pour Access)
Pour la requête suivante, modification du MRD :
VEHICULE (Code, Type, M arque, Puissance,NomV)
UPDATE VEHICULE
SET NomV = (SELECT Nom FROM PLAQUE WHERE Code = CodeV)
WHERE Code IN (SELECT CodeV FROM PLAQUE);
Attention, le SELECT dans un UPDATE ne fonctionne pas sous Access.
Cette requête peut également être réalisée par une jointure :
UPDATE VEHICULE, PLAQUE
SET NomV = Nom
WHERE Code = CodeV AND
Code IN (SELECT CodeV FROM PLAQUE);
Article plus récent Article plus ancien