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

MySQLのSELECT文でif/else条件を使う方法をわかりやすく解説

MySQLでは、SELECT文の中で条件分岐を行いたい場合、IF()関数を使うことでif/elseのような処理を実現できます。この記事では、実際にテーブルを作成し、サンプルデータを使いながらIF()関数の使い方を解説します。

IF()関数の基本構文

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

条件式がTRUE(真)であれば2番目の引数を返し、FALSE(偅)であれば3番目の引数を返します。プログラミング言語におけるif/else文と同じような役割を果たします。

サンプルテーブルの作成

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

mysql> create table DemoTable1966
    (
    UserId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    UserName varchar(20),
    PhotoLiked int
    );
Query OK, 0 rows affected (0.00 sec)

テストデータの挿入

次に、INSERTコマンドを使ってレコードを登録します。

mysql> insert into DemoTable1966(UserName,PhotoLiked) values('Chris',57);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1966(UserName,PhotoLiked) values('David',100);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1966(UserName,PhotoLiked) values('Mike',68);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1966(UserName,PhotoLiked) values('Sam',78);
Query OK, 1 row affected (0.00 sec)

登録データの確認

SELECT文ですべてのレコードを表示して、正しく登録されているか確認します。

mysql> select * from DemoTable1966;

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

+--------+----------+------------+
| UserId | UserName | PhotoLiked |
+--------+----------+------------+
|      1 | Chris    |         57 |
|      2 | David    |        100 |
|      3 | Mike     |         68 |
|      4 | Sam      |         78 |
+--------+----------+------------+
4 rows in set (0.00 sec)

SELECT文でIF()関数による条件分岐を行う

それが本題です。ここでは「PhotoLiked(いいね数)が75より大きい場合はユーザー名を、それ以外は『Likes are less』というメッセージを表示する」という条件分岐を実装します。

mysql> select if(PhotoLiked > 75,UserName,'Likes are less') as Result from DemoTable1966;

実行結果は以下のようになります。

+------------------------------------------------+
| Result                                         |
+------------------------------------------------+
| Likes are less                                 |
| David                                          |
| Likes are less                                 |
| Sam                                            |
+------------------------------------------------+
4 rows in set (0.00 sec)

結果の解説

  • Chris(57):75以下のため「Likes are less」が表示される
  • David(100):75より大きいためユーザー名「David」が表示される
  • Mike(68):75以下のため「Likes are less」が表示される
  • Sam(78):75より大きいためユーザー名「Sam」が表示される

このように、IF()関数を使えば1つのSQL文の中で簡単に条件分岐処理が可能です。

補足:CASE式との使い分け

3つ以上の条件分岐が必要な場合は、CASE式を使うとより柔軟に対応できます。

SELECT 
  CASE 
    WHEN PhotoLiked > 90 THEN 'Very Popular'
    WHEN PhotoLiked > 75 THEN 'Popular'
    ELSE 'Likes are less'
  END AS Result 
FROM DemoTable1966;

単純な2択の分岐ならIF()関数、複雑な多段階の分岐ならCASE式というように、用途に応じて使い分けるとよいでしょう。

  1. MySQLのUPDATE文の中でSELECTステートメントを使う方法

    MySQLでUPDATEコマンドを実行する際に、同じテーブルを参照するSELECTステートメントを組み合わせたいケースはよくあります。しかし、UPDATE文の中で直接サブクエリとして対象テーブルを指定するとエラーになるため、工夫が必要です。解決策:サブクエリとWHERE句を組み合わせるこの問題を回避するには、WHERE句とともにサブクエリを使用し、さらにそのサブクエリを別のSELECT文でラップ(派生テーブル化)します。これにより、MySQLは一時的なテーブルとして扱うため、更新中のテーブルへの参照エラーを防ぐことができます。実際の手順を順番に見ていきましょう。1. テーブルを作成するまず、サ

  2. MySQLのCONCAT_WS()関数で文字列を連結しながら条件に一致する行を抽出する方法

    MySQLのCONCAT_WS()関数とはMySQLでは、CONCAT_WS()関数を使用することで、複数のカラムや値を指定した区切り文字で連結できます。さらにWHERE句と組み合わせれば、条件に一致する行だけを抽出しながら、読みやすい形式の文字列として出力することも可能です。この記事では、実際にテーブルを作成し、CONCAT_WS()と条件指定を組み合わせたクエリの実行例を順番に解説します。サンプルテーブルの作成まず、ユーザー情報を格納するテーブル「demo38」を作成しましょう。mysql> create table demo38-> (-> user_id int,-&