MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLのUPDATE文でIF()関数を使い、条件に応じてカラムの値を設定する方法

MySQLでは、UPDATE文の中でIF()関数を組み合わせることで、条件に応じた値を柔軟に設定できます。本記事では、学生の点数データを例に、点数が60点より大きいかどうかを判定し、「PASS」または「FAIL」を自動的にStatusカラムへ設定する方法を解説します。

IF()関数の基本構文

IF()関数は以下のような形式で使用します。

IF(条件, 条件が真の場合の値, 条件が偽の場合の値)

この関数をUPDATE文のSET句に記述することで、行ごとに異なる値を一括して更新できます。

サンプルテーブルの作成

まず、テーブルを作成します。

mysql> create table DemoTable
    -> (
    -> StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> StudentName varchar(20),
    -> StudentMarks int,
    -> Status varchar(20)
    -> );
Query OK, 0 rows affected (0.97 sec)

StudentIdは自動採番(AUTO_INCREMENT)の主キーとし、学生名・点数・合否ステータスを持つシンプルな構造です。

テストデータの挿入

INSERTコマンドで複数のレコードを挿入します。このとき、Statusカラムは指定しないためNULLになります。

mysql> insert into DemoTable(StudentName,StudentMarks) values('Chris',79);
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable(StudentName,StudentMarks) values('David',59);
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable(StudentName,StudentMarks) values('Bob',60);
Query OK, 1 row affected (0.23 sec)
mysql> insert into DemoTable(StudentName,StudentMarks) values('Mike',45);
Query OK, 1 row affected (0.16 sec)

挿入されたレコードの確認

SELECT文ですべてのレコードを表示してみましょう。

mysql> select *from DemoTable;

実行結果は以下の通りです。

+-----------+-------------+--------------+--------+
| StudentId | StudentName | StudentMarks | Status |
+-----------+-------------+--------------+--------+
|         1 | Chris       |           79 | NULL   |
|         2 | David       |           59 | NULL   |
|         3 | Bob         |           60 | NULL   |
|         4 | Mike        |           45 | NULL   |
+-----------+-------------+--------------+--------+
4 rows in set (0.00 sec)

UPDATE文とIF()関数で条件付き更新を実行

ここが本題です。次のクエリでは、StudentMarksが60より大きければ「PASS」、そうでなければ「FAIL」をStatusカラムに設定しています。

mysql> update DemoTable
    -> set Status=if(StudentMarks > 60 ,'PASS','FAIL');
Query OK, 4 rows affected (0.40 sec)
Rows matched: 4 Changed: 4 Warnings: 0

WHERE句を指定していないため、テーブル内の全4行が対象となり、各行ごとにIF()関数の条件が評価されます。

更新後のレコード確認

もう一度SELECT文でテーブルの内容を確認します。

mysql> select *from DemoTable;

実行結果:

+-----------+-------------+--------------+--------+
| StudentId | StudentName | StudentMarks | Status |
+-----------+-------------+--------------+--------+
|         1 | Chris       |           79 | PASS   |
|         2 | David       |           59 | FAIL   |
|         3 | Bob         |           60 | FAIL   |
|         4 | Mike        |           45 | FAIL   |
+-----------+-------------+--------------+--------+
4 rows in set (0.00 sec)

結果のポイント

  • Chris(79点)は「60より大きい」という条件を満たすため PASS になりました。
  • Bob(60点)は条件が「> 60(より大きい)」であるため、ちょうど60点でも FAIL になります。60点を合格にしたい場合は「>= 60」とします。

まとめ

UPDATE文のSET句でIF()関数を使えば、アプリケーション側で処理を分けることなく、SQLだけで条件分岐を行いながら一括更新が可能です。似た用途にはCASE式も利用できますが、単純な二者択一の判定であればIF()関数の方が簡潔に書けます。大量データのステータス振り分けなどでぜひ活用してください。

  1. MySQLでENUM型のステータスから「Active」のレコードを抽出する方法

    MySQLでは、ENUM型のカラムに格納された特定の値(例:「Active」)を持つレコードを簡単に抽出できます。この記事では、ENUM型でステータスを管理するテーブルを作成し、「Active」ステータスのレコードだけを取得する具体的な手順を解説します。 1. ENUM型を使ったテーブルの作成 まず、ステータスをENUM型として定義したテーブルを作成します。ENUM型は、あらかじめ指定した文字列のリストの中から1つの値のみを格納できる便利なデータ型です。 mysql> create table DemoTable2037     -> ( &

  2. ApacheとMySQLを連携させる方法|ユーザー認証とログ管理の基本

    ApacheとMySQLの連携とは本記事では、Webサーバー「Apache」とデータベース「MySQL」を組み合わせて活用する方法を解説します。Apacheは、Apache Software Foundationによって開発・保守されているWebサーバーソフトウェアです。ユーザーからWebページへのアクセス要求(リクエスト)を受け付け、いくつかのセキュリティチェックを実施したうえで、目的のページへとユーザーを誘導します。MySQLによるユーザー認証MySQLデータベースを使ってユーザー認証を行えるプログラムは数多く存在します。これらのプログラムを利用すれば、アクセスログをMySQLのテーブルに