かなめのロジック

フリーSEの雑記ブログ。ORACLEやPostgreSQL、情報セキュリティ、金融について主に書いています。

MERGE文、少し変わった使い方

time 2016/03/09

MERGE文、少し変わった使い方

1回のSQLでデータ登録と更新を実現する便利なSQL文のMERGE文ですが、少し変わった使い方を本記事では紹介します。
oracle10gから出来るようになった使い方で、それ以降のバージョンで使用する事が出来ます。

sponsored link

存在する場合の更新のみ実施

MERGE文は、DML文の1つで、元テーブルのデータが先のテーブルに存在すれば更新、存在しなければ登録を1度に行うSQLですが、更新のみや登録のみを行うことが出来ます。

更新のみ行いたい場合は、WHEN MATCHEDのみを記述し、WHEN NOT MATCHEDを記述しないことで実現する事が出来ます。
他のテーブルの値でデータ更新する場合に、最適な実行計画で実現出来る方法の一つです。

存在しない場合の登録のみ実施

登録のみ行いたい場合は、WHEN NOT MATCHEDのみを記述し、WHEN MATCHEDを記述しないことで実現する事が出来ます。

更新や登録時に条件を指定する

更新や登録時に、条件を指定し特定のデータのみ更新や登録を行うことが出来ます。
UPDATEやINSERTの後ろにWHERE句を指定することで実現できます。

更新後、データを削除する

MERGE文のWHEN MATCHEDでデータを更新後、条件を指定しデータを削除する事も可能です。
例えば、論理削除されているデータは、更新先テーブルから削除するという使い方が考えられます。

WHEN MATCHEDのUPDATEの後に、DELETE WHERE 条件 を記述します。更新後のデータの値で条件を評価します。

注意点として、更新したデータのみ削除が有効ということです。

まとめ

MERGE文について、少し変わった使い方を見てきました。
様々な使い方を把握することで、1回のMERGE文で実現出来ることが増えます。また、全体の処理時間を短縮出来る可能性もあります。

MERGE文は様々なことが出来るので理解が大変です。少しずつ理解していきましょう。

関連


sponsored link

管理人

かなめ

フリーの業務系システムエンジニア。情報処理安全確保支援士。 ORACLEと金融と子育ての狭間で、元気に楽しくやってます。 [詳細]

管理人twitter

ブログ村



sponsored link