狙ったデータを狙い撃ち(Where句)



狙ったデータを狙い撃ち(Where句)

1.挿入データに誤り発見

大変なことが発生しました。前回、支払テーブルにデータを挿入しましたが、データの内容に誤りがあることが分かりました。

中野食糧の支払金額が2,000円ではなく、2,250円だったのです。

さてこのような場合、訂正方法には2種類あります。

 

①.現在のレコードを削除し、修正版のレコードを再度Insert文で投入する。

②.現在のレコードを直接修正する。

 

どちらの方法も、実際の仕事の現場ではあり得ます(本番環境では②しかありえませんが・・・)。②のように直接修正するのが一般的ですが、何かテストを控えていて、Logをキレイにしておきたい場合や、修正件数が多くかつ、絞り込むのが大変な場合は、もう全件削除して、全件Insert文により挿入した方が分かりやすい場合は、①が選択される場合もあります。

さて本題ですが、今回のようにある特定のレコードのみ修正する場合に、レコードの絞り込みはどのように行うのでしょうか。

そう、このような絞り込みを行う場合に記述するのがWhere句なのです。Where句は、Insert文以外のDML(Select、Delete、Update)文で使用することができます。それでは、実際にSQLを書いてみましょう。

構文は以下のようになります。(Update文、Delete文、Select文)

 

 

今回、実際に実行するSQL文

①.Select * from 支払 Where 支払コード = 18

②.Update 支払 Set 支払金額 = 2250 Where 支払コード = 18

①と②を見てみると、Where句の部分は同じです。そして、なぜ修正する前に①のSELECT文を実行するのでしょうか?それは、修正予定のレコードの抽出が本当に正しいかどうか確認する為です。もし条件が緩ければ、余計なレコードまで修正してしまい、2次災害につながります。必ず、UpdateやDelete文など既存テーブルの修正を行う場合は事前に条件式のチェックを行うようにします。

それでは修正しましょう。

手順① SELECT文の実行

①.のSELECT文を実行します。SQLのタブのSQL記載欄に上記SQL文を貼り付け実行します。結果は以下のとおりでした。修正したいレコード1件のみ抽出されました。問題ありません。ですので、引き続きUPDATE文を実行します。

手順② UPDATE文の実行

②.のUPDATE文を実行します。同様に、SQLタブのSQL記載欄にUPDATE文を貼り付け実行します。次のようなメッセージが返却されれば成功です。

手順③ UPDATE実行後の結果確認

再度、手順①のSELECT文を実行します。支払金額が2,250円に更新されていますね。

Select * from 支払 Where 支払コード = 18;

ちなみに全件表示させてみましょう。その場合は、Where句を外します。当然ですが、それ以外のレコードは更新されていません。

Select * from 支払;

Insert文の実行⇒Update文の実行とSELECT文の実行は問題なくできました。

次回以降は、SELECT文によるSQL操作のいろいろを見ていきます。

 

 

 

 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です