SQL - Merge Update
Apa itu Merge Update (Upsert) ?
Merge Update/Upsert adalah perintah standard SQL untuk melakukan INSERT record baru kalau kondisi tidak memenuhi, atau UPDATE/DELETE existing record kalau kondisinya memenuhi.
Dengan kata lain Merge Update/Upsert ini adalah satu perintah SQL yang menggabungkan INSERT, UPDATE, DELETE dalam satu perintah.
Perintah ini menyelesaikan permasalahan umum di dunia Software Engineering yang biasanya membutuhkan kasus yang serupa, yaitu :
- INSERT data jika belum ada, UPDATE data jika sudah ada.
Standard SQL ini dimasukkan dalam standar ANSI SQL:2003 dan disempurnakan di ANSI SQL:2008
Sering dinamakan UPSERT (UPdate inSERT), karena dianggap mewakili perintah INSERT dan UPDATE secara bersamaan.
Apakah semua versi database mengakomodasi ini ?
Tentu saja tidak, walaupun sudah dimasukkan dalam standar ANSI SQL:2003, namun tidak semua relational database mengakomodasinya.
Walaupun beberapa database tidak mengakomodasinya, tapi mereka mempunyai perintah khusus yang mirip dengan standard MERGE INTO …
Berikut datar database yang mengakomodasinya baik yang mengikuti standar atau mempunyai perintah yang mirip :
Database | Disupport sejak Versi | Perintah |
---|---|---|
Oracle | Oracle 9i | MERGE INTO … |
SQL Server | SQL Server 2008 | MERGE INTO … |
PostgreSQL | PostgreSQL 9.5 | INSERT … ON CONFLICT … DO UPDATE SET … |
MySQL | MySQL 5.6 | INSERT … ON DUPLICATE KEY REPLACE … |
Bagaimana perintahnya
Oracle
MERGE <table_tujuan>
USING <table_sumber>
ON <kondisi>
WHEN MATCHED THEN
UPDATE
SET <kolom1> = <nilai1 [, kolom2 = nilai2...]>
WHEN NOT MATCHED THEN
INSERT <(kolom1 [,kolom2...]>
VALUES <(nilai1 [,nilai2...])>
WHEN SOURCE NOT MATCHED THEN DELETE;
PostgreSQL
INSERT INTO <table_tujuan>
ON CONFLICT <kondisi>
DO UPDATE set
SET <kolom1> = <nilai1 [, kolom2 = nilai2...]>