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式というように、用途に応じて使い分けるとよいでしょう。
-
MySQLのUPDATE文の中でSELECTステートメントを使う方法
MySQLでUPDATEコマンドを実行する際に、同じテーブルを参照するSELECTステートメントを組み合わせたいケースはよくあります。しかし、UPDATE文の中で直接サブクエリとして対象テーブルを指定するとエラーになるため、工夫が必要です。解決策:サブクエリとWHERE句を組み合わせるこの問題を回避するには、WHERE句とともにサブクエリを使用し、さらにそのサブクエリを別のSELECT文でラップ(派生テーブル化)します。これにより、MySQLは一時的なテーブルとして扱うため、更新中のテーブルへの参照エラーを防ぐことができます。実際の手順を順番に見ていきましょう。1. テーブルを作成するまず、サ
-
MySQLのCONCAT_WS()関数で文字列を連結しながら条件に一致する行を抽出する方法
MySQLのCONCAT_WS()関数とはMySQLでは、CONCAT_WS()関数を使用することで、複数のカラムや値を指定した区切り文字で連結できます。さらにWHERE句と組み合わせれば、条件に一致する行だけを抽出しながら、読みやすい形式の文字列として出力することも可能です。この記事では、実際にテーブルを作成し、CONCAT_WS()と条件指定を組み合わせたクエリの実行例を順番に解説します。サンプルテーブルの作成まず、ユーザー情報を格納するテーブル「demo38」を作成しましょう。mysql> create table demo38-> (-> user_id int,-&