Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

【中級者向け】MySQL CASEを使いこなしてデータの分別

MySQLのCASEはテーブル上のデータを分別したり、集計したりする際に便利です。SELECTステートメントを使用することができるのであれば、ぜひ覚えておきたい機能ですね。そこで今回の記事では、MySQL CASEの主な機能をご紹介しつつ、実際に使用する方法をハンズオンで体験していきましょう。

本記事の要点
  • MySQLのCASEはテーブルデータの分別に利用可能
  • MySQLを使ったCASEのハンズオン

MySQL CASEとは

MySQLのCASEは、テーブル内のデータを一定の条件に当てはめて整理する機能を持っています。SELECTステートメントだけを使用するとテーブルの全てのデータを登録順に取得することしかできません。しかし、CASEを使用することで条件に当てはまるデータが登録されたレコードへ指定した表示ができるのです。

MySQL CASEの構文を以下で見てみましょう。

SELECT カラム名 ,
CASE WHEN 条件式1 THEN 結果1
WHEN 条件式2 THEN 結果2
…
(ELSE ‘例外の表示’)
END (AS ‘結果を表示するカラム名’)
FROM テーブル名;

指定したカラムが「条件式1」に当てはまった場合には結果1の表示、「条件式2」に当てはまった場合には結果2の表示といったように、データを分別することができます。

「結果」については、「END AS」の後にカラム名を指定した場合、収納されるカラム名となります。こちらは必須でありません。

また、データが条件式に当てはまらなかった場合に「ELSE」を設定しておきましょう。こちらも必須ではありませんが、データの中に例外がある可能性もあるため、できるだけ設定しておくようにしましょう。

MySQLのCASEを使用した例

SELECTステートメントの構文を覚えている方であれば、CASEの加わる構文も難しくはないはずです。実際にMySQLのCASEが使用されている構文を見て、さらに理解を深めましょう。

以下のようなテーブルがある前提で説明を進めます。

foodsテーブル

+---------+------+
| food    | type |
+---------+------+
| Banana  |    1 |
| Apple   |    1 |
| Bread   |    3 |
| Cookie  |    3 |
| Beef    |    2 |
| Chicken |    2 |
+---------+------+

「type」カラムには「果物 = 1」「肉類 = 2」「その他 = 3」といった法則で数字が入っています。この数字を利用して、CASEを使用してみましょう。

CASEを含むSELECTステートメント

SELECT *, CASE WHEN type = 1 THEN '果物' WHEN type = 2 THEN '肉類' ELSE 'その他' END AS 'ジャンル' FROM foods;

出力結果

+---------+------+--------------+
| food    | type | ジャンル     |
+---------+------+--------------+
| Banana  |    1 | 果物         |
| Apple   |    1 | 果物         |
| Bread   |    3 | その他       |
| Cookie  |    3 | その他       |
| Beef    |    2 | 肉類         |
| Chicken |    2 | 肉類         |
+---------+------+--------------+
6 rows in set (0.00 sec)

CASEの後に書き込んだ条件式がを反映したテーブルが出力されました。このようにレコード内に識別記号・数字などが入っていれば、簡単にレコードを分類別表示することが可能です。

【関連記事】
▶︎MySQL初心者にマスターしてほしいコマンドラインからの使用方法
▶︎MySQLのUPDATEの基本とデータベースに格納された値を効率よく変更する方法

MySQLでCASEハンズオンにトライ

こちらでは、実際にMySQLというデータベースを使用してCASEを使ってみましょう。

準備

まずはMySQLを使用するための準備をしていきます。

MySQLのインストール・接続

まだMySQLをインストールしていない場合は、インストールしましょう。

$ brew install mysql

MySQLのインストールが終了したら、接続します。

$ sudo mysql -u root -p

データベースの作成

次にデータベースをMySQL上に作成し、使用するデータベースを指定しましょう。

mysql> CREATE DATABASE potepan;
Query OK, 1 row affected (0.00 sec)

mysql> USE potepan;

これでMySQLを使用する準備は完了しました。

ベースとなるテーブルの作成

次にベースとなるテーブルを作成しましょう。

CREATE TABLE creatures(name VARCHAR(50), type INT, lifespan INT);
Query OK, 0 rows affected (0.01 sec)

上記は生物の名前(name)、種族(type)、寿命(lifespan)をまとめるためのテーブルです。種族は「哺乳類 = 1」「魚類 = 2」「昆虫類 = 3」に分けて登録していきます。次にレコードの登録も行いましょう。

INSERT INTO creatures VALUES('アフリカゾウ', 2, 60),('カブトムシ', 3, 0.5),('カ ツオ', 2, 10),('クマムシ', 3, 100), ('ブタ', 1, 20),('サーモン', 2, 5);
Query OK, 6 rows affected (0.00 sec)

テーブルの状態

SELECT * FROM creatures;
+--------------------+------+----------+
| name               | type | lifespan |
+--------------------+------+----------+
| アフリカゾウ       |    1 |       60 |
| カブトムシ         |    3 |        1 |
| カツオ             |    2 |       10 |
| クマムシ           |    3 |      100 |
| ブタ               |    1 |       20 |
| サーモン           |    2 |        5 |
+--------------------+------+----------+
6 rows in set (0.00 sec)

MySQL CASEで分類表示

それでは、最初に見た例のような分類表示を体験してみましょう。creaturesテーブルから「type」カラムを「哺乳類 = 1」「魚類 = 2」「昆虫類 = 3」という法則で分別していきます。

CASEを含むSELECTステートメント

SELECT *, CASE WHEN type = 1 THEN '哺乳類' WHEN type = 2 THEN '魚類' WHEN type = 3 THEN '昆虫類' ELSE '未分類' END AS '種族' FROM creatures;

出力結果

+--------------------+------+----------+-----------+
| name               | type | lifespan | 種族      |
+--------------------+------+----------+-----------+
| アフリカゾウ       |    1 |       60 | 哺乳類    |
| カブトムシ         |    3 |        1 | 昆虫類    |
| カツオ             |    2 |       10 | 魚類      |
| クマムシ           |    3 |      100 | 昆虫類    |
| ブタ               |    1 |       20 | 哺乳類    |
| サーモン           |    2 |        5 | 魚類      |
+--------------------+------+----------+-----------+
6 rows in set (0.00 sec)

上記のように種族を表示することによって、一気にテーブルの可読性が上がり、第三者が見た時にも分かりやすくなります。

MySQL CASEで分類表示2

次にlifespanカラムを利用して分別をしてみましょう。ただし、今回は条件式の書き方を変更します。条件式の書き方にも注目してみてください。

CASEを含むSELECTステートメント

SELECT *, CASE WHEN lifespan  50 THEN '長生き' WHEN lifespan  10 THEN '通常' WHEN lifespan <= 10 THEN '短命' ELSE '未分類' END AS '寿命' FROM creatures;

出力結果

+--------------------+------+----------+-----------+
| name               | type | lifespan | 寿命      |
+--------------------+------+----------+-----------+
| アフリカゾウ       |    1 |       60 | 長生き    |
| カブトムシ         |    3 |        1 | 短命      |
| カツオ             |    2 |       10 | 短命      |
| クマムシ           |    3 |      100 | 未分類    |
| ブタ               |    1 |       20 | 通常      |
| サーモン           |    2 |        5 | 短命      |
+--------------------+------+----------+-----------+
6 rows in set (0.00 sec)

条件式には「<」のような比較演算子を含めることもできます。比較演算子を用いた条件式を使うことで、範囲ごとに分類表示することができるため便利です。

まとめ

今回の記事では、MySQL CASEの主な機能をご紹介しつつ、実際に使用する方法をハンズオンで体験していきました。使ってみると非常に簡単なCASEですが、テーブルデータの分類を行う際には非常に便利です。ぜひ、テーブルデータの可読性を上げる際に利用してみましょう。

【関連記事】
▶︎【初心者から一歩先へ】MySQLのWHERE BETWEEN句で範囲検索!
▶︎【WHERE DATE句】MySQL 日付・時間処理関数の使い方まとめ10選

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。