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: 0WHERE句を指定していないため、テーブル内の全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()関数の方が簡潔に書けます。大量データのステータス振り分けなどでぜひ活用してください。
-
MySQLでENUM型のステータスから「Active」のレコードを抽出する方法
MySQLでは、ENUM型のカラムに格納された特定の値(例:「Active」)を持つレコードを簡単に抽出できます。この記事では、ENUM型でステータスを管理するテーブルを作成し、「Active」ステータスのレコードだけを取得する具体的な手順を解説します。 1. ENUM型を使ったテーブルの作成 まず、ステータスをENUM型として定義したテーブルを作成します。ENUM型は、あらかじめ指定した文字列のリストの中から1つの値のみを格納できる便利なデータ型です。 mysql> create table DemoTable2037 -> ( &
-
ApacheとMySQLを連携させる方法|ユーザー認証とログ管理の基本
ApacheとMySQLの連携とは本記事では、Webサーバー「Apache」とデータベース「MySQL」を組み合わせて活用する方法を解説します。Apacheは、Apache Software Foundationによって開発・保守されているWebサーバーソフトウェアです。ユーザーからWebページへのアクセス要求(リクエスト)を受け付け、いくつかのセキュリティチェックを実施したうえで、目的のページへとユーザーを誘導します。MySQLによるユーザー認証MySQLデータベースを使ってユーザー認証を行えるプログラムは数多く存在します。これらのプログラムを利用すれば、アクセスログをMySQLのテーブルに