MERGEでINSERTとUPDATEを1行で実行する

スポンサーリンク

MERGE文を使うと行の存在有無を気にせずに1行のSQLでOK

あるテーブルのデータを更新する際には「該当行があればUPDATE、無ければINSERT」のようにデータが存在するかどうかでIF文を書いてINSERTとUPDATEを切り分ける必要がある。

そんな面倒を解決するためにSQLServer 2008からはMERGE文が利用できるようになりました。

これを利用すると、指定した条件に応じて挿入(INSERT)、更新(UPDATE)、削除(DELETE)を実行することが可能になります。

MERGEステートメントの構成

MERGEステートメントは、次の主要な句で構成されています。

MERGE句 挿入(INSERT)、更新(UPDATE)、削除(DELETE)の各操作の対象となるテーブルまたはビューを指定します。
USING句 対象と結合されるデータ ソースを指定します。
ON句 対象とソースが一致しているかどうか判断する結合条件を指定します。
WHEN句 WHEN MATCHED、WHEN NOT MATCHED BY TARGET、および WHEN NOT MATCHED BY SOURCE は、ON句の結果、および WHEN 句で指定した追加の検索条件の結果に基づいて実行する操作を指定します。
OUTPUT句 挿入(INSERT)、更新(UPDATE)、削除(DELETE)される対象の行ごとに 1 行を返します。

1つのテーブルに対するMERGE文

以下は1つのテーブルに対してのMERGE文で、該当行があればUPDATE(更新)、なければINSERT(挿入)します。

UPDATE(更新)の例

以下はデータが存在した場合のUPDATE(更新)の例です。

上記の実行結果は

になります。

最初に検証用に挿入した「nameが二郎さん,ageが40」のデータが「nameが太郎さん,ageが30」に更新されています。

ON以下の「A.no=B.no」の条件が一致したのでUPDATE(更新)されています。

INSERT(挿入)の例

以下はデータが存在しない場合のINSERT(挿入)の例です。

上記の実行結果は

になります。

ON以下の「A.no=B.no」の条件が一致しなかったのでINSERT(挿入)されています。

2つのテーブルから結果をMERGEするMERGE文

以下は2つのテーブルに対してのMERGE文で、test_tableAにtest_tableBの該当行があればUPDATE(更新)、なければINSERT(挿入)します。

UPDATE(更新)の例

以下はデータが存在した場合のUPDATE(更新)の例です。

上記の実行結果は

になります。

test_tableAにもtest_tableBにも「no=10」の太郎さんが存在したのでtest_tableBの内容でtest_tableAの太郎さんが更新されています。

INSERT(挿入)の例

以下はデータが存在した場合のINSERT(挿入)の例です。

上記の実行結果は

になります。

test_tableAには「no=10」の太郎さんが存在しなかったのでtest_tableBの内容でtest_tableAに太郎さんが挿入されています。

このようにMERGE文を利用するればIF文で該当データの存在確認をせずにUPDATE(更新)したりINSERT(挿入)したりできます。

また、UPDATEの代わりにDELETEを利用すればデータの削除も行えます。

SQL Server
スポンサーリンク
色白おばけをフォローする

おすすめプログラミングスクール

「侍エンジニア塾」は、未経験者でも結果が出せるプログラミング学習サービスです。
専属のインストラクターとの対面かSkypeでのレッスンを通じてプログラミングスキルを身につけて頂き、就職や転職までサポートします。
「侍エンジニア塾」の『3つ』の大きな特徴

  1. 完全マンツーマンレッスン
  2. フルオーダーメイドカリキュラム作成
  3. 独立・起業・フリーランス支援

誰もが自分の技術で稼げる人材になるための教育プログラム
TECH::EXPERTのこだわりは「実務的な教育コンテンツ」と「徹底したサポート体制」の2つです。

  1. 現場で使える実践的な技術が身につく
    有名企業のエンジニアへヒアリングを重ね、1年かけて創り上げた教育プログラムがあなたを実務レベルの即戦力エンジニアへ高めます
  2. 学習方法はライフスタイルに合わせて学べます
    ・一気にエンジニアへ駆け上がる「短期集中スタイル」
    ・無理なく確実にエンジニアへ「週末集中スタイル」
    ・自分のペースで自由に学ぶ「オンラインスタイル」

TECH::CAMP(エンジニアスクール)。
【Webアプリケーションコース】
全くの未経験からWebアプリケーション開発に必要なスキルを全て学ぶことができます。
【iPhoneアプリコース】
全くの未経験から最新の開発言語Swiftを用いてiPhoneアプリ開発を学ぶことができます。
自分だけのiPhoneアプリつくって世界に向けてリリースしたい方には自信を持っておすすめできる内容です。

ソフトウェア開発日記
タイトルとURLをコピーしました