みなさんこんにちは!
今回はSQL文の最重要機能の一つUPDATEについて見ていきましょう。UPDATEは既存データの更新を行うための命令です。とても重要なコマンドなので、ここで完全にマスターしておきましょう。
ミスって、全データの内容を破壊してしまってからでは遅いですからね…顧客データなど、重要な部分を触る可能性のある人は、特に入念に学んでおきましょう。
- [基本]更新に使うSQLを覚えよう!
- [基本]「UPDATE」の具体的な使い方!
- [応用]計算式もつかえる!
- [応用]JOINを使ってデータを更新!
- [応用]「CASE」と組み合わせて条件文も使える!
まずは基本的な使い方から入っていき…他のコマンドと組み合わせた応用的な話も見ていきましょう。それではよろしくお願いいたします。
更新関係に使うSQLを覚えよう!
SQLのデータ更新関係の命令は主に以下の3種類です。
UPDATE・INSERT・DELETE
これらを理解することで「UPDATE」がどこまでのことをできるのかを、知ることができると思いますので、最初に見ていきましょう。
「UPDATE文」で既存の更新
今回の主役UPDATEです。この命令は既存データの更新を行えます。新規作成や削除は行えない点に注意しましょう。詳細はまた後ほど説明します。
「INSERT文」で新規追加
INSERTはデータの新規作成を行う命令です。ユーザーを追加する時などに使用することになるでしょう。データの更新などは行えません。
「DELETE文」で削除
DELETEはデータの削除を行う命令です。扱い的には、一番気をつけなければならない命令でしょう。こちらのコマンドの詳細は以下にまとめてあります。
更新系処理まとめ
- 新規データの追加・・・INSERT
- 既存データの更新・・・UPDATE
- 既存データの削除・・・DELETE
つまりSQL文ではこのように使い分けることになります。今回学ぶ「UPDATE」は、追加・削除は行えませんので注意しましょう。もしそれらが必要な時は「INSERT」や「DELETE」を使用しましょう。
今回例題で使用するテーブル
今回は以下のテーブルを使用して、例題を見ていきましょう。
userテーブル:
+------+--------+-------+ | id | name | point | +------+--------+-------+ | 1 | 山田 | 80 | | 2 | 鈴木 | 90 | | 3 | 加藤 | 60 | | 4 | 田中 | 70 | +------+--------+-------+
シンプルにidと名前とポイントが記録されているuserテーブルです。
「UPDATE」の使い方
それでは今回の主役「UPDATE」について見てきます。
基本形
基本的な使い方は以下の通りです。
UPDATE [テーブル名] SET [更新処理];
テーブル名を指定して、更新処理を書くわけですね!早速実例を見てみましょう。
実例で見てみよう
以下は全員のポイントを0にする実例です。
実行命令:
UPDATE user SET point = 0;
実行のあと全表示した結果:
+------+--------+-------+ | id | name | point | +------+--------+-------+ | 1 | 山田 | 0 | | 2 | 鈴木 | 0 | | 3 | 加藤 | 0 | | 4 | 田中 | 0 | +------+--------+-------+
ちゃんと全員の点数が0になっています!
「WHERE」で条件式をつけよう!
UPDATEの基本は、理解できたと思います。
しかしこれでは、毎回全員に更新がかかってしまいます。それを解決するのが、条件を指定するWHERE句です。
基本形
基本的な使い方は、UPDATEの後ろに「WHERE [条件式]」をつけるだけです。
実行命令:
UPDATE [テーブル名] SET [更新処理] WHERE [条件式];
実例で見てみよう
今回は実例として、山田さんだけ点数を100ポイントにしてみましょうか。
実行命令:
UPDATE user SET point = 100 WHERE name = "山田";
実行のあと全表示した結果:
+------+--------+-------+ | id | name | point | +------+--------+-------+ | 1 | 山田 | 100 | | 2 | 鈴木 | 0 | | 3 | 加藤 | 0 | | 4 | 田中 | 0 | +------+--------+-------+
無事一人だけ100になっていますね!このように条件を指定するのが、WHEREです。
計算式もつかえる!
「山田さんの点数を倍にする」例えばそんな計算式を入れることも可能です。
実行命令:
UPDATE user SET point = point * 2 WHERE name = "山田";
実行のあと全表示した結果:
+------+--------+-------+ | id | name | point | +------+--------+-------+ | 1 | 山田 | 200 | | 2 | 鈴木 | 0 | | 3 | 加藤 | 0 | | 4 | 田中 | 0 | +------+--------+-------+
ちゃんと倍になっていますね!このように、更新時処理に計算式を入れることも可能です。
JOINを使ってデータを更新!
JOINとはテーブル同士を連結させる命令です。詳細は以下のリンクを読んでみてください。
今回は本筋から外れるため本当にシンプルに書きますが…JOINを使用してテーブルを連結しつつUPDATEを行うことも可能です。連結のためにもう1テーブル用意しましょう。
point_masterテーブル:
+------+-------+ | id | point | +------+-------+ | 1 | 10 | | 2 | 20 | | 3 | 30 | | 4 | 40 | +------+-------+
このpoint_masterテーブルと、userテーブルを連携して、UPDATEをしてみましょう。処理としては、point_masterのpointを、同一idのユーザーのpointに上書きしてみましょう。
実行命令:
UPDATE user INNER JOIN point_master ON user.id = point_master.id SET user.point = point_master.point;
実行のあと全表示した結果:
+------+--------+-------+ | id | name | point | +------+--------+-------+ | 1 | 山田 | 10 | | 2 | 鈴木 | 20 | | 3 | 加藤 | 30 | | 4 | 田中 | 40 | +------+--------+-------+
うまく行けましたね!
※またこの時のUPDATEの書き方は、環境によって少し変わってきます。もしこのサンプルの形式でうまくいかなかったら、Googleで検索し、自分の環境に合わせた書き方をしましょう。
「CASE」と組み合わせて条件文も使える!
CASEは、SQLで条件分岐を書くことができるすごい命令です。詳細は以下のリンクを読んでみてください。CASEとUPDATEを組み合わせた使用方法もリンク先にまとめてあります。
まとめ
今回はUPDATEについて見てきました。SQLの中でもっとも重要な機能の一つです。ぜひしっかり理解しておきましょう。
簡単に使用するだならシンプルな命令ですが、いろいろな命令と組み合わせると奥の深い命令ですよ!