【SQL】これで完璧!UPDATE文の重要テクニックを一覧まとめ

みなさんこんにちは!

今回は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の中でもっとも重要な機能の一つです。ぜひしっかり理解しておきましょう。

簡単に使用するだならシンプルな命令ですが、いろいろな命令と組み合わせると奥の深い命令ですよ!

この記事を書いた人

学生時代を含めると、かれこれ10年以上プログラマーとして過ごしています。
様々な言語や環境、プロジェクトに関わってきましたので、より実践的な記事をみなさんにお届きるよう情報発信していきます!

目次