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

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標準にも準拠しているため、可読性の高いクエリを書くことができます。

  1. MySQLのSELECT *で重複しないID(一意な値)を取得する方法

    MySQLでテーブルから全カラム(SELECT *)を取得しつつ、特定のカラムの重複を排除して一意なIDだけを取り出したい場合があります。そんなときはGROUP BY句を使うことで実現できます。基本構文SELECT * FROM テーブル名 GROUP BY カラム名;指定したカラムの値ごとにレコードがグループ化され、各グループから1行ずつ結果として返されます。その結果、重複したIDを持つ行は1行にまとめられます。サンプルテーブルの作成実際に動きを確認するため、テーブルを作成してみましょう。mysql> create table DistinctIdDemo -> (

  2. JavaでMySQLのSELECTクエリにPreparedStatement(プリペアドステートメント)を使う方法

    executeQuery()メソッドの基本的な使い方JavaからMySQLに対してSELECTクエリを実行する場合は、PreparedStatementオブジェクトのexecuteQuery()メソッドを使用します。基本構文は以下の通りです。yourPreparedStatementObject = yourConnectionObject.prepareStatement(yourQueryName);yourResultSetObject = yourPreparedStatementObject.executeQuery();それでは、実際にサンプルデータベース「sample」を使って手