忍者ブログ

エンジニア初心者の備忘録

エンジニア初心者が躓いたことハマったことを公開します!

MySQLのCASE構文~プログラム超初心者のためのMySQLコマンド~

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

コメント

ただいまコメントを受けつけておりません。

MySQLのCASE構文~プログラム超初心者のためのMySQLコマンド~

今回はMySQLのCASE構文について整理して書き留めておきたいと思います。


まず、MySQLのCASE構文は主に次の2つの構文に分類できます。


1.値のリストとの比較
CASE case_value
    WHEN when_value THEN statement_list
    [WHEN when_value THEN statement_list] ...
    [ELSE statement_list]
END CASE

『MySQL 5.6 リファレンスマニュアル :: 13.6.5.1 CASE 構文』


2.条件分岐
CASE
    WHEN search_condition THEN statement_list
    [WHEN search_condition THEN statement_list] ...
    [ELSE statement_list]
END CASE

『MySQL 5.6 リファレンスマニュアル :: 13.6.5.1 CASE 構文』


実際に試してみたいと思いますが、その前に、準備を行います。

$ mysql -u root

mysql> create database students;
Query OK, 1 row affected (0.00 sec)

mysql> show databases;
+------------------------+
| Database               |
+------------------------+
| students               |
+------------------------+

mysql> Ctrl-C -- exit!
Aborted

$ mysql -u root -D students

mysql> show tables;
Empty set (0.00 sec)

mysql> create table test(name text, age integer);


mysql> show tables;
+--------------------+
| Tables_in_students |
+--------------------+
| test               |
+--------------------+
1 row in set (0.00 sec)

mysql> insert into test (name, age) values ('taro', 14), ('jiro', 16), ('sabro', 18);
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from test;
+-------+------+
| name  | age  |
+-------+------+
| taro  |   14 |
| jiro  |   16 |
| sabro |   18 |
+-------+------+
3 rows in set (0.00 sec)

準備ができましたので、それぞれ試してみたいと思います。
なお、下記の例では、CASE構文で取得したデータのカラムにタイトル名を設定するためにas句を使用していますが、この際には「end case」の「case」は取り外す必要があります。

1.値のリストとの比較

mysql> select
    ->     name,
    ->     case age
    ->         when 13 then '中学1年生'
    ->         when 14 then '中学2年生'
    ->         when 15 then '中学3年生'
    ->         when 16 then '高校1年生'
    ->         when 17 then '高校2年生'
    ->         when 18 then '高校3年生'
    ->         else 'その他'
    ->     end as class
    -> from test;
+-------+---------------+
| name  | class         |
+-------+---------------+
| taro  | 中学2年生     |
| jiro  | 高校1年生     |
| sabro | 高校3年生     |
+-------+---------------+
3 rows in set (0.00 sec)


2.条件分岐

mysql> select
    ->     name,
    ->     case
    ->         when age between 13 and 15 then '中学生'
    ->         when age between 16 and 18 then '高校生'
    ->         else 'その他'
    ->     end as junior_senior
    -> from test;
+-------+---------------+
| name  | junior_senior |
+-------+---------------+
| taro  | 中学生        |
| jiro  | 高校生        |
| sabro | 高校生        |
+-------+---------------+
3 rows in set (0.00 sec)


以上です!


【参考サイト】
『MySQL 5.6 リファレンスマニュアル :: 13.6.5.1 CASE 構文』
『MySQL 5.6 リファレンスマニュアル :: 12.4 制御フロー関数』
『カラムの値に応じて異なる結果を返す条件式の記述』
PR

コメント

プロフィール

HN:
プラムザ 太郎
性別:
非公開

P R