MERGE

テーブルのレコードを更新、または追加します。

追加しようとするレコードが無い場合はINSERT、レコードがある場合はUPDATEします。
俗に[UPSERT](UPDATEとINSERTの造語。アップサート)と言ったりもします。

MERGE INTO table_name1
USING table_name2 | sub_query
      ON ( join_condition )
 WHEN MATCHED THEN
      UPDATE SET column_name = value, …
 WHEN NOT MATCHED THEN
      INSERT [ (column_name, … ) ]
      VALUES ( value , … ) ;

 

*
[社員マスタ2]にある情報を[社員マスタ]にマージする。
社員番号がプライマリキーであるとき、
[社員マスタ2]の社員番号と同じ社員番号が[社員マスタ]にない場合は[社員マスタ]にINSERTを、
ある場合は[社員マスタ]にUPDATEする場合、以下のように記述します。

/* 社員マスタ2にある情報を社員マスタにマージ */
MERGE INTO 社員マスタ
USING 社員マスタ2
    ON ( 社員マスタ.社員番号 = 社員マスタ2.社員番号)
/* 既存レコードの更新 */
WHEN MATCHED THEN
    UPDATE SET
           名前 = 社員マスタ2.名前,
           所属部署コード = 社員マスタ2.所属部署コード,
           役職 = 社員マスタ2.役職
/* 新規レコードの作成 */
WHEN NOT MATCHED THEN
    INSERT ( 社員番号, 名前, 所属部署コード, 役職 )
    VALUES ( 社員マスタ2.社員番号,
             社員マスタ2.名前,
             社員マスタ2.所属部署コード,
             社員マスタ2.役職 )
;