SQL Server MERGE (日本語)
概要:このチュートリアルでは、SQL Server MERGE
の使用方法を学習します。別のテーブルから一致した値に基づいてテーブル内のデータを更新するステートメント。
はじめにSQLServerMERGEステートメント
ソーステーブルとターゲットテーブルという2つのテーブルがあり、次のことを行う必要があるとします。ソーステーブルから一致した値に基づいてターゲットテーブルを更新します。次の3つのケースがあります。
- ソーステーブルに、ターゲットテーブルに存在しない行がいくつかあります。この場合、ソーステーブルにある行をターゲットテーブルに挿入する必要があります。
- ターゲットテーブルには、ソーステーブルに存在しない行がいくつかあります。この場合、ターゲットテーブルから行を削除する必要があります。
- ソーステーブルには、ターゲットテーブルの行と同じキーを持つ行がいくつかあります。ただし、これらの行の非キー列の値は異なります。この場合、ソーステーブルからの値でターゲットテーブルの行を更新する必要があります。
次の図は、対応するアクションでソーステーブルとターゲットテーブルを示しています。更新および削除:
INSERT
、UPDATE
、およびDELETE
ステートメントを個別に使用するには、3つの個別のステートメントを作成する必要がありますソーステーブルの一致する行を使用してデータをターゲットテーブルに更新するステートメント。
ただし、SQLServerにはMERGE
ステートメントが用意されています。同時にアクション。次に、MERGE
ステートメントの構文を示します。
Code language: SQL (Structured Query Language) (sql)
最初に、ターゲットテーブルとソースを指定しますMERGE
句のテーブル。
次に、merge_condition
は、ソーステーブルの行がどのように一致するかを決定します。ターゲットテーブルの行。これは、join句の結合条件に似ています。通常、照合には主キーまたは一意キーのいずれかのキー列を使用します。
第3に、merge_condition
は次の3つの状態になります。MATCHED
、NOT MATCHED
、およびNOT MATCHED BY SOURCE
。
-
MATCHED
:これらはマージ条件に一致する行です。図では、それらは青で示されています。一致する行については、ターゲットテーブルの行列をソーステーブルの値で更新する必要があります。 -
NOT MATCHED
:これらはソースの行ですターゲットテーブルに一致する行がないテーブル。図では、オレンジ色で示されています。この場合、ソーステーブルからターゲットテーブルに行を追加する必要があります。NOT MATCHED
はNOT MATCHED BY TARGET
とも呼ばれることに注意してください。 -
NOT MATCHED BY SOURCE
:これらは、ソーステーブルのどの行とも一致しないターゲットテーブルの行です。これらは、図では緑色で示されています。ターゲットテーブルをソーステーブルのデータと同期する場合は、この一致条件を使用して、ターゲットテーブルから行を削除する必要があります。
SQL ServerMERGEステートメントの例
製品カテゴリごとの売上を格納する2つのテーブルsales.category
とsales.category_staging
があるとします。
sales.category_staging
(ソーステーブル)の値を使用してデータをsales.category
(ターゲットテーブル)に更新するには、次の
ステートメント:
この例では、両方のテーブルのcategory_id
列の値をマージ条件として使用しました。
- まず、行
sales.category_staging
テーブルのid1、3、4はターゲットテーブルの行と一致するため、MERGE
ステートメントは値を更新しますカテゴリ名と金額の列sales.category
テーブル内。 - 次に、
sales.category_staging
テーブルのID5および6の行が存在しません。sales.category
テーブルにあるため、MERGE
ステートメントはこれらの行をターゲットテーブルに挿入します。 - 3番目の行
sales.category
テーブルのID2は、sales.sales_staging
テーブルに存在しないため、MERGE
ステートメントはこの行を削除します。
マージの結果、sales.category
テーブルのデータは完全に同期されます。 sales.category_staging
テーブル。
このチュートリアルでは、SQL Server MERGE
ステートメントを使用して変更を加える方法を学習しました。別のテーブルの一致する値に基づくテーブル内。