Pages - Menu

Pages

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)

Liste champ :  nom  des champs pour lesquels on fournit  une valeur.  Inutile si on valorise tous les champs de la table.

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]

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.

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);
            

Aucun commentaire:

Enregistrer un commentaire