SQL MERGE

Dans le langage SQL, la commande MERGE permet d’insérer ou de mettre à jour des données dans une table. Cette commande permet d’éviter d’effectuer plusieurs requêtes pour savoir si une donnée est déjà dans la base de données et ainsi adapter l’utilisation d’une requête pour ajouter ou une autre pour modifier la donnée existante. Cette commande peut aussi s’appeler « upsert ».

Attention : bien que l’instruction a été ajoutée dans le standard SQL:2003, les différentes SGBD n’utilisent pas toutes les mêmes méthodes pour effectuer un upsert.

Syntaxe

La syntaxe standard pour effectuer un merge consiste à utiliser une requête SQL semblable à celle ci-dessous :

MERGE INTO table1
  USING table_reference
  ON (conditions)
  WHEN MATCHED THEN
    UPDATE SET table1.colonne1 = valeur1, table1.colonne2 = valeur2
    DELETE WHERE conditions2
  WHEN NOT MATCHED THEN
    INSERT (colonnes1, colonne3) 
    VALUES (valeur1, valeur3)

Voici les explications détaillées de cette requête :

  1. MERGE INTO permet de sélectionner la table à modifier
  2. USING et ON permet de lister les données sources et la condition de correspondance
  3. WHEN MATCHED permet de définir la condition de mise à jour lorsque la condition est vérifiée
  4. WHEN NOT MATCHED permet de définir la condition d’insertion lorsque la condition n’est pas vérifiée

Compatibilité

Les systèmes de gestion de bases de données peuvent implémenter cette fonctionnalité soit de façon standard, en utilisant une commande synonyme ou en utilisant une syntaxe non standard.

  • Syntaxe standard : SQL Server, Oracle, DB2, Teradata et EXASOL
  • Utilisation du terme UPSERT : Microsoft SQL Azure et MongoDB
  • Utilisation non standard : MySQL, SQLite, Firebird, IBM DB2 et Microsoft SQL
Partager