Section courante

A propos

Section administrative du site

Instructions DML : Instructions INSERT, UPDATE, DELETE et MERGE

Les instructions DML, tirant son nom de l'abréviation de l'anglicisme «Data Manipulation Language», sont l'élément du langage de programmation SQL utilisé pour la récupération et la manipulation des données. À l'aide de ces instructions, vous pouvez effectuer des opérations telles que : ajouter de nouvelles lignes, mettre à jour et supprimer des lignes existantes, fusionner des tables,...

Les instructions du DML sont les suivantes :

Instruction Description
INSERT Ajouter de nouvelles lignes à une table
UPDATE Mise à jour des valeurs des champs
DELETE Supprimer des lignes d'une table
MERGE Fusion de tables
SELECT Affiche la liste d'un/des que contient un ou des tables

Instruction INSERT

L'instruction INSERT de SQL Server est utilisée pour ajouter de nouvelles lignes à une table. Avant de vous familiariser avec cette déclaration, veuillez prendre en compte les points suivants :

L'insertion utilise une syntaxe simplifié suivante :

INSERT INTO nom_table VALUES (valeur, valeur, valeur,...)

Insérer une nouvelle ligne dans le tableau :

  1. INSERT INTO employees VALUES (2 , 'Jacques Gagnon' , 30200 , '2014/02/16')

Le tableau suivant reflète les données de la table employees une fois l'instruction INSERT terminée :

emp_no emp_nom emp_salaire emp_dateembauche
1 Jean Tremblay 50000 2021/11/01
2 Jacques Gagnon 30200 2014/02/16

Les points importants

Utilisation d'une liste de colonnes

L'exemple suivant utilise une liste de colonnes pour spécifier explicitement les valeurs qui sont insérées dans chaque colonne (cette syntaxe est plus stable si vous modifier la structure des tables) :

INSERT INTO nom_table (nom_colonne, nom_colonne , nom_colonne ...) VALUES (valeur, valeur, valeur ...)

Insertion d'une nouvelle ligne dans le tableau :

  1. INSERT INTO employees (emp_no, emp_nom, emp_salaire, emp_dateembauche) VALUES (6 , 'Steeve Roy' , 37100 , GETDATE())

Instruction INSERT INTO SELECT

Cette syntaxe permet de copier des éléments de données d'une autre table dans la table cible demandée :

INSERT INTO nom_table_cible (nom_colonne, nom_colonne, nom_colonne ...)
SELECT ...
FROM nom_table_source
WHERE ...

On aura par exemple l'instruction suivante pour l'insertion d'employée pour le département numéro 50 :

  1. INSERT INTO employees (emp_no , emp_nom , emp_salaire) SELECT emp_no , emp_nom , emp_salaire FROM   employees WHERE  no_departement = 50

Instruction UPDATE

L'instruction UPDATE est utilisée pour modifier les lignes existantes :

UPDATE table_name
SET column=value, column=value ...
WHERE condition

Mise à jour du salaire de l'employé numéro 77 :

  1. UPDATE employees SET emp_salaire = 50000 WHERE emp_no = 77

Il est possible de mettre à jour plusieurs champs en même temps, par exemple mettre à jour le salaire, le nom et le prénom du salarié numéro 77 :

  1. UPDATE employees SET emp_salaire = 50000, emp_nom = 'Steeve Tremblay' WHERE emp_no = 77

Une sous-requête peut être imbriquée dans l'instruction UPDATE de SQL Server. Par exemple, mettre à jour le salaire des employés du département 71 afin qu'il corresponde au salaire moyen des employés du département 70 :

  1. UPDATE employees SET emp_salaire = (SELECT AVG(emp_salaire) FROM employees WHERE no_departement = 70) WHERE no_departement = 71

Il est possible de mettre à jour vers une valeur NULL ou DEFAULT :

  1. UPDATE employees SET emp_salaire = DEFAULT WHERE emp_nom = 'Jean Roy'
  2. UPDATE employees SET emp_salaire = NULL WHERE no_departement = 79

L'exécution de l'instruction UPDATE de SQL Server sans utiliser la clause WHERE de SQL Server entraîne la mise à jour de tous les champs d'une colonne.

Instruction DELETE

L'instruction DELETE de SQL Server est utilisée pour supprimer des lignes existantes d'une table :

DELETE FROM nom_table WHERE condition

L'exemple suivant permet de supprimer ligne contenant les données de l'employé numéro 107 :

  1. DELETE FROM employees WHERE emp_no = 107

Une sous-requête peut être imbriquée dans l'instruction DELETE :

  1. DELETE FROM employees WHERE no_departement = (SELECT no_departement FROM departement WHERE nom_departement = 'Ventes')

Instruction MERGE

L'instruction MERGE de SQL Server est utilisée pour synchroniser les données de deux tables, en fonction des différences trouvées entre elles, si la même ligne existe dans les deux tables (ligne avec le même identifiant client par exemple), mais que chaque ligne a toujours des valeurs différentes (chaque table contient un numéro de téléphone différent de ce client), l'opération UPDATE sera exécutée. Si la ligne n'existe que dans une table, l'opération INSERT sera exécutée.

Les illustrations suivantes illustrent le concept de fusion. A la fin de chaque mois, les données de la table Clients sont fusionnées avec les données de la table Sauvegardes. Au début du mois, la seule activité MERGE transférait (INSERT) toutes les lignes, telles quelles, vers la table de sauvegarde (à condition que ce soit la première fois que la table de sauvegarde soit remplie).

NoClient NomClient Paquet
1 Antoine Tremblay 2.5
2 Jean Marcoux 5
3 Stephane Marchand 3.5
4 Johanne Gagné 2
5 Kathy Bonenfant 1
NoClient NomClient Paquet
1 Antoine Tremblay 2.5
2 Jean Marcoux 5
3 Stephane Marchand 3.5
4 Johanne Gagné 2
5 Kathy Bonenfant 1

En fin de mois, du fait des modifications ayant été effectuées dans la table Clients, les données sont fusionnées avec la table Sauvegardes comme suit :

NoClient NomClient Paquet
1 Antoine Tremblay 2.5
2 Jean Marcoux 5
3 Stephane Marchand 3.5
4 Johanne Gagné 2
5 Kathy Bonenfant 1
6 Annie Roy 5
NoClient NomClient Paquet
1 Antoine Tremblay 2.5
2 Jean Marcoux 5
3 Stephane Marchand 3.5
4 Johanne Gagné 2
5 Kathy Bonenfant 1
6 Annie Roy 5

Voici la syntaxe :

MERGE INTO table_destination alias
USING table_source alias
ON condition
WHEN MATCHED THEN
UPDATE SET
alias_table_destination.colonne = alias_table_source.colonne,
alias_table_destination.colonne = alias_table_source.colonne
...
WHEN NOT MATCHED THEN
INSERT VALUES (alias_table_source.colonne, alias_table_source.colonne ..
)

on aura par exemple :

  1. MERGE INTO  sauvegarde_client Sauvegardes
  2. USING       Clients clts
  3. ON         (Sauvegardes.no_client = clts.no_client)
  4. WHEN MATCHED THEN
  5. UPDATE SET
  6. Sauvegardes.nom_client = clts.nom_client ,
  7. Sauvegardes.client_paquet = clts.client_paquet
  8. WHEN NOT MATCHED THEN
  9. INSERT VALUES(clts.no_client , clts.nom_client , clts.client_paquet)

Transactions de base de données

Les transactions sont une seule unité de diverses commandes de modification (telles que UPDATE, INSERT, DELETE), qui dans la plupart des cas sont associées à un seul groupe logique. Le terme «un seul groupe logique» fait référence à un ensemble d'opérations avec connexion logique ; par exemple : un lot d'opérations DML destinées à mettre à jour des éléments de données spécifiques dans la table clients.



Dernière mise à jour : Mercredi, le 3 novembre 2021