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

MySQLクエリでIF文を使う正しい方法を徹底解説

MySQLのクエリ内で条件分岐を行いたい場合、IF関数を使用します。SELECT文の中にIFを組み込むことで、条件の結果に応じて異なる値を返すことができます。

IF関数の基本構文

MySQLクエリにIFステートメントを挿入するには、以下の構文を使用します。

SELECT yourColumnName, IF(yourCondition, yourStatement1, yourStatement2) FROM yourTableName;

IF関数は3つの引数を取ります。

  • 第1引数(yourCondition):評価される条件式
  • 第2引数(yourStatement1):条件がTRUEの場合に返す値
  • 第3引数(yourStatement2):条件がFALSEの場合に返す値

実際に試してみよう

1. サンプルテーブルを作成する

まず、動作確認用のテーブルを作成します。

mysql> create table DemoTable1571
    -> (
    -> Id int,
    -> Value int
    -> );
Query OK, 0 rows affected (5.63 sec)

2. レコードを挿入する

INSERTコマンドを使って、テーブルにいくつかのレコードを追加します。

mysql> insert into DemoTable1571 values(101,500);
Query OK, 1 row affected (1.07 sec)
mysql> insert into DemoTable1571 values(102,450);
Query OK, 1 row affected (0.47 sec)
mysql> insert into DemoTable1571 values(103,300);
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable1571 values(104,700);
Query OK, 1 row affected (0.23 sec)

3. データを確認する

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

mysql> select * from DemoTable1571;

実行すると、以下のような結果が出力されます。

+------+-------+
| Id   | Value |
+------+-------+
|  101 |   500 |
|  102 |   450 |
|  103 |   300 |
|  104 |   700 |
+------+-------+
4 rows in set (0.00 sec)

IF関数を使ったクエリの実行例

それでは、MySQLクエリにIFステートメントを組み込んだクエリを実行してみます。ここでは「Valueが550より大きいかどうか」を判定する条件を設定しています。

mysql> select Value, if(Value > 550, 'Value is greater than 550', 'Value is less than 550') from DemoTable1571;

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

+-------+------------------------------------------------------------------------+
| Value | if(Value > 550, 'Value is greater than 550', 'Value is less than 550') |
+-------+------------------------------------------------------------------------+
|   500 | Value is less than 550                                                 |
|   450 | Value is less than 550                                                 |
|   300 | Value is less than 550                                                 |
|   700 | Value is greater than 550                                              |
+-------+------------------------------------------------------------------------+
4 rows in set (0.00 sec)

実行結果のポイント

この結果から、IF関数が各行に対して条件を評価し、条件に応じた文字列を返していることがわかります。

  • Valueが500・450・300の行 → 条件「Value > 550」がFALSEのため、「Value is less than 550」が返される
  • Valueが700の行 → 条件がTRUEのため、「Value is greater than 550」が返される

補足:CASE式との使い分け

MySQLではIF関数以外にもCASE式を使って条件分岐を実現できます。単純な二択の分岐であればIF関数が簡潔ですが、3つ以上の条件を扱う場合や可読性を重視する場合はCASE式の利用が推奨されます。用途に応じて使い分けるとよいでしょう。

  1. MySQLテーブルに多数の行を高速に挿入する最速の方法とは?

    MySQLで大量の行を効率よくテーブルに挿入したい場合、INSERT INTO文を1回だけ実行し、複数の値セットをカンマ(,)で区切って指定する方法が最も高速です。INSERT文を1行ずつ繰り返し実行すると、そのたびにSQLの解析やネットワーク通信のコストが発生しますが、複数行挿入(バルクインサート)を使えばこれらのオーバーヘッドを大幅に削減できます。最速の挿入方法の構文insert into yourTableName values(NULL,yourValue1,yourValue2),(NULL,yourValue1,yourValue2),....N;このように、1つのINSERT I

  2. MySQLデータベースへの挿入時にdecimal(19,2)の値が変わる?truncate()で正確な値を保存する方法

    decimal(19,2)の値が変わる原因と対処法MySQLのDECIMAL(19,2)型カラムに値を直接挿入すると、小数点以下3桁目が四捨五入され、元の値と異なる数値が保存されることがあります。正確な実数値をそのまま保存したい場合は、truncate()関数を使って小数点以下2桁で切り捨ててから挿入します。テーブルの作成まず、以下のクエリでテーブルを作成します。mysql> create table demo59-> (-> price decimal(19,2)-> );Query OK, 0 rows affected (1.12 sec)レコードの挿入次に、in