【初学者必見!】SQLの基本、実務使用例を徹底解説!MERGE編

MERGE SQL

※この記事にはプロモーションが含まれています。

ふりかえり

筆者
筆者

本記事は、SQLの基本、実務使用例編になります。

SQLの基礎に関しましては、

【初学者必見!】SQLの超基礎編の記事をご覧くださいませ。

A子
A子

本編に入ります!

MERGEとは?

MERGE は、既に存在しているかどうかを判定して、更新(UPDATE)または挿入(INSERT)を行う SQL文です。
ある行があれば更新、なければ新しく追加」というような処理が1つのSQL文でできます。

関数の基本構文

筆者
筆者

まずは、基本構文から見ていきましょう!

merge into 対象テーブル using 参照テーブル
on (結合条件)
when matched then
  update set ...
when not matched then
  insert (...) values (...);

実務レベルの使用例を見ていこう!

筆者
筆者

実際に、SQLを使用してデータを確認していきましょう。

SQLに関しては以下を使用して解説していきます。

create table文、select文、insert文、update文、delete文、

drop table文、につきましては、過去にアップロードした

【初学者必見!】SQLの超基礎編の記事をご覧くださいませ。

A子
A子

目次の、「ふりかえり」のところにそれぞれの記事のリンクが

貼ってあるよ!

または、サイドバーのカテゴリーにSQLがあるから、そちらからでも

参照できます!

Oracle Live SQLで実行していきます!

今回、実行するSQLの一覧

例:社員データの更新または挿入

登場する2つのテーブル

  • employees(社員マスタ) → 更新される or 追加されるテーブル
  • new_employees(新しい社員データ) → 比較用のデータ

CREATE文

-- メインの社員テーブル
create table employees (
  emp_id number primary key,
  name varchar2(50),
  department varchar2(50)
);

-- 新しい社員データを持つテーブル
create table new_employees (
  emp_id number primary key,
  name varchar2(50),
  department varchar2(50)
);

INSERT文(初期データ)

-- 既存の社員テーブルに1件だけ
insert into employees values (1, '田中 太郎', '営業');

-- 新しい社員テーブルには2件(1つは既存、1つは新規)
insert into new_employees values (1, '田中 太郎', '企画'); -- ←部署変更
insert into new_employees values (2, '佐藤 花子', '開発'); -- ←新しい人

SELECT文(実行前確認)

select * from employees;

MERGE文

merge into employees e
using new_employees n
on (e.emp_id = n.emp_id)
when matched then
  update set
    e.name = n.name,
    e.department = n.department
when not matched then
  insert (emp_id, name, department)
  values (n.emp_id, n.name, n.department);

SELECT文(実行後の確認)

select * from employees;

まとめ

処理内容
matched主キーなどで既に存在する → UPDATE される
not matched存在しない行 → INSERT される
使いどころ差分データの更新、データ同期、バッチ処理など
筆者
筆者

MERGEについて解説しました。

次回もお楽しみに!

この記事を書いた人
たくたく

文系出身・3年目のWeb系エンジニアです。
C#とSQLを得意としています。
同棲生活は2年目に入り、日々仲良く楽しく暮らしています。
プライベートではバイクや車で旅行に行くことが趣味です。
サンリオ好きで、中でもシナモン推しです。
お酒好きとして毎週の晩酌をリラックスタイムにしています。

たくたくをフォローする
SQLエンジニア
シェアする

コメント

タイトルとURLをコピーしました