MySQLでSELECT文にIF/ELSEのような条件分岐を使う方法
はい、MySQLではSELECT文の中でIF/ELSEに相当する条件分岐を行うことが可能です。
MySQLにはIF()関数が用意されており、「IF(条件式, 真の場合の値, 偽の場合の値)」という形式で記述することで、SELECTの結果を条件に応じて切り替えることができます。これは他のプログラミング言語におけるIF/ELSE構文と同じ考え方です。
サンプルテーブルの作成
まず、動作確認用のテーブルを作成しましょう。以下のコマンドを実行します。
mysql> create table DemoTable721 (
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
FirstName varchar(100),
Marks int,
CountryName varchar(100)
);
Query OK, 0 rows affected (0.57 sec)テストデータの挿入
次に、INSERTコマンドを使っていくつかのレコードを挿入します。
mysql> insert into DemoTable721(FirstName,Marks,CountryName) values('Chris',56,'US');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable721(FirstName,Marks,CountryName) values('Robert',78,'UK');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable721(FirstName,Marks,CountryName) values('Mike',45,'AUS');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable721(FirstName,Marks,CountryName) values('Carol',89,'ENG');
Query OK, 1 row affected (0.22 sec)登録済みレコードの確認
SELECT文ですべてのレコードを表示して、データが正しく登録されているか確認します。
mysql> select *from DemoTable721;
実行すると、次のような結果が出力されます。
+----+-----------+-------+-------------+ | Id | FirstName | Marks | CountryName | +----+-----------+-------+-------------+ | 1 | Chris | 56 | US | | 2 | Robert | 78 | UK | | 3 | Mike | 45 | AUS | | 4 | Carol | 89 | ENG | +----+-----------+-------+-------------+ 4 rows in set (0.00 sec)
IF()関数を使ったSELECT文の実行例
それでは、SELECT文の中でIF()関数を使い、条件分岐を実装してみましょう。ここでは「Marks(点数)が75より大きい場合はMarksの値を、そうでなければCountryName(国名)を表示する」というクエリを実行します。
mysql> select FirstName,IF(Marks > 75,Marks,CountryName) from DemoTable721;
実行結果は以下の通りです。
+-----------+----------------------------------+ | FirstName | IF(Marks > 75,Marks,CountryName) | +-----------+----------------------------------+ | Chris | US | | Robert | 78 | | Mike | AUS | | Carol | 89 | +-----------+----------------------------------+ 4 rows in set (0.00 sec)
実行結果の解説
出力結果を見ると、条件分岐が正しく機能していることがわかります。
- Chris(56点):75より大きくないため、国名「US」が表示される
- Robert(78点):75より大きいため、点数「78」が表示される
- Mike(45点):75より大きくないため、国名「AUS」が表示される
- Carol(89点):75より大きいため、点数「89」が表示される
このように、IF()関数を使えばSELECT文の中でも柔軟な条件分岐処理を実現できます。また、より複雑な多分岐が必要な場合はCASE式を使うとよいでしょう。CASE式は複数の条件を順番に評価でき、SQL標準にも準拠しているため、可読性の高いクエリを書くことができます。
-
MySQLのSELECT *で重複しないID(一意な値)を取得する方法
MySQLでテーブルから全カラム(SELECT *)を取得しつつ、特定のカラムの重複を排除して一意なIDだけを取り出したい場合があります。そんなときはGROUP BY句を使うことで実現できます。基本構文SELECT * FROM テーブル名 GROUP BY カラム名;指定したカラムの値ごとにレコードがグループ化され、各グループから1行ずつ結果として返されます。その結果、重複したIDを持つ行は1行にまとめられます。サンプルテーブルの作成実際に動きを確認するため、テーブルを作成してみましょう。mysql> create table DistinctIdDemo -> (
-
JavaでMySQLのSELECTクエリにPreparedStatement(プリペアドステートメント)を使う方法
executeQuery()メソッドの基本的な使い方JavaからMySQLに対してSELECTクエリを実行する場合は、PreparedStatementオブジェクトのexecuteQuery()メソッドを使用します。基本構文は以下の通りです。yourPreparedStatementObject = yourConnectionObject.prepareStatement(yourQueryName);yourResultSetObject = yourPreparedStatementObject.executeQuery();それでは、実際にサンプルデータベース「sample」を使って手