目次
ふりかえり

筆者
本記事は、SQLの基本、実務使用例編になります。
SQLの基礎に関しましては、
【初学者必見!】SQLの超基礎編の記事をご覧くださいませ。

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子
目次の、「ふりかえり」のところにそれぞれの記事のリンクが
貼ってあるよ!
または、サイドバーのカテゴリーに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について解説しました。
次回もお楽しみに!










コメント