MySQLと言えば世界中でもっとも多くの方が利用しているデータベースです。
今回はそのMySQLでCASEを使った操作方法について解説してみたいと思います。
それでは早速CASEについて見ていきましょう。
CASE句
まずはCASEの記述方法です。
具体的には以下の様な記述方式となっています。
CASE WHEN 条件1 THEN 表示1 WHEN 条件2 THEN 表示2 …… ELSE 表示その他 END
CASE句は、”WHEN”で条件を指定し、その条件に合う場合に”THEN”で指定した表示を返します。
条件となる式は他の言語と同じく、いくつも指定することが出来ます。
またどの条件にも合致しない場合には、”ELSE”で指定した表示が返されます。
CASE句の括りには”END”を忘れないようにしてください。
ELSEに関してはつけなくても特に問題はないように思えるかもしれませんが、明示的に記述していない場合、予期せぬエラーが返ってくることがあります。
データベースでエラーが発生した場合には全ての動作が停止してしまうので、データベースは常に厳格に記述するように心がける必要が有ります。
このCASE句に関しても必ずしも必要無いとは言え、ELSEも含め一連の作業として記述する癖をつけてください。
CASE句を使用した例
先ほどまではCASE句についての基本的記述の解説をしてきましたが、ここでは実際にCASE句を使って流れを見てみましょう。
CASE句を実際に使用するにはデータベースにデータがないと始まらないので、まずはデータベースにデータを登録する方法について解説します。
以下のように記述し、データベースに情報を登録してください。
// データベースを追加する CREATE DATABASE case_db CHARACTER SET = utf8; // 上で作成したデータベースに切り替える USE case_db; // テーブルの作成 CREATE TABLE sample_table( id INT(11) AUTO_INCREMENT NOT NULL, name VARCHAR(30) NOT NULL, score INT(3) NOT NULL, PRIMARY KEY (id)); // 上で作成したテーブルにレコードを追加する INSERT INTO sample_table(name, score) VALUES ('イチロー', 95), ('ジロー', 75), ('サブロー', 60), ('シロー', 100), ('ゴロー', 80);
これでデータベースとテーブルの作成が完了したと思いますので、確認のために以下を記述してみましょう。
DESC sample_table; SELECT * FROM sample_table;
実行結果
MariaDB [case_db]> DESC sample_table; +-------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | name | varchar(30) | NO | | NULL | | | score | int(3) | NO | | NULL | | +-------+-------------+------+-----+---------+----------------+ 3 rows in set (0.015 sec) MariaDB [case_db]> SELECT * FROM sample_table; +----+----------+-------+ | id | name | score | +----+----------+-------+ | 1 | イチロー | 95 | | 2 | ジロー | 75 | | 3 | サブロー | 60 | | 4 | シロー | 100 | | 5 | ゴロー | 80 | +----+----------+-------+ 5 rows in set (0.000 sec)
このように表示されていれば問題なく作成されています。
これでCASE句を使った例を説明する前準備が整いましたので、ここからがやっと本番です。
今回はCASE句を使い、この5名に「優、良、可」の評価をしてみたいと思います。
評価基準は以下の通りとします。
- 優=90点以上
- 良=80点以上90点未満
- 可=70点以上80点未満
- 未評価=上記以外
この評価基準を基にCASE句を使う場合には、”SELECT句 + CASE句”で整形する必要があります。
SELECT句についての説明は今回は割愛しますが、SELECT句を使う場合、以下のような記述となります。
// SELECT句 SELECT カラム名 FROM テーブル名 // SELECT句 + CASE句 SELECT カラム名 CASE WHEN 条件1 THEN 表示1 WHEN 条件2 THEN 表示2 …… ELSE 表示その他 END FROM テーブル名
具体的な記述は以下の通りです。
SELECT id, name, score , CASE WHEN score >= 90 THEN "優" WHEN 90 > score AND score >= 80 THEN "良" WHEN 80 > score AND score >= 70 THEN "可" ELSE "未評価" END AS "評価" FROM sample_table;
ENDの後に”AS”がついていることに注目してください。
これはSELECT句で表示させる際に、一時的に「評価」というカラムを追加して表示させる命令となります。
今回は評価基準で分けてわかりやすく表示させるため、こういった方法を使っています。
実行結果
+----+----------+-------+--------+ | id | name | score | 評価 | +----+----------+-------+--------+ | 1 | イチロー | 95 | 優 | | 2 | ジロー | 75 | 可 | | 3 | サブロー | 60 | 未評価 | | 4 | シロー | 100 | 優 | | 5 | ゴロー | 80 | 良 | +----+----------+-------+--------+
上記のSELECT句で実行をかけるとこのように新たにカラムが追加された状態で表示されたことが確認できます。
まとめ
いかがでしたか?
今回はCASE句を使ったデータベースの検索について解説してみました。
データベースはどの言語でも開発を行う際には必ずと言っていいほど利用するものです。
またCASE句に関してもデータベース関連の命令としては基本中の基本であり、システムを開発する上で利用するケースも非常に多い為、よく理解しておく必要が有ります。
しっかりと理解できるようになるまでこの記事を何度も読み返してみてください。