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 :
- MERGE INTO permet de sélectionner la table à modifier
- USING et ON permet de lister les données sources et la condition de correspondance
- WHEN MATCHED permet de définir la condition de mise à jour lorsque la condition est vérifiée
- 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