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

SQLのcase式で使うwhenについてまとめています。

※MySQLのサンプルデータベースEmployeesを使用しています。

SQLのwhenは、case式の分岐条件を記述する

case式では、分岐条件をwhenで指定した分だけ分岐条件を指定できます。

以下の例では、select文の対象カラムにcase式を使い、在職中の社員にemployement、退職した社員には退職日時を表示しています。

SELECT 
	employees.first_name, 
	employees.last_name, 
case
	when dept_emp.from_date < '2000-01-01' and dept_emp.to_date = '9999-01-01' then 'employment'
	when dept_emp.to_date != '9999-01-01' then dept_emp.to_date
	else 'employement'
end as zaishoku
FROM 
	dept_emp, 
	employees 
WHERE 
	dept_emp.emp_no = employees.emp_no
limit 10;

+------------+-----------+------------+
| first_name | last_name | zaishoku   |
+------------+-----------+------------+
| xGeorgi    | Facello   | employment |
| Bezalel    | Simmel    | employment |
| Parto      | Bamford   | employment |
| Chirstian  | Koblick   | employment |
| Kyoichi    | Maliniak  | employment |
| Anneke     | Preusig   | employment |
| Tzvetan    | Zielinski | employment |
| Saniya     | Kalloufi  | 2000-07-31 |
| Sumant     | Peac      | employment |
| Duangkaew  | Piveteau  | 2000-06-26 |
+------------+-----------+------------+
10 rows in set (0.00 sec)

【関連記事】
SQLのCASE式サンプル集 order byやgroup byとの組み合わせもバッチリ 

CASE式のWHENでNULL判定をおこなうサンプル

whenの条件指定にはNULL判定も可能です。

下記のサンプルでは、社員番号499995 ~ 500000の社員に対してemp_no(社員番号)、first_name(名)、last_name(姓)を表示しています。first_nameがNULLの場合、UNKNOWNを表示しています。

mysql> desc employees;
+------------+---------------+------+-----+---------+-------+
| Field      | Type          | Null | Key | Default | Extra |
+------------+---------------+------+-----+---------+-------+
| emp_no     | int           | NO   | PRI | NULL    |       |
| birth_date | date          | NO   |     | NULL    |       |
| first_name | varchar(14)   | YES  |     | NULL    |       |
| last_name  | varchar(16)   | NO   |     | NULL    |       |
| gender     | enum('M','F') | NO   |     | NULL    |       |
| hire_date  | date          | NO   |     | NULL    |       |
+------------+---------------+------+-----+---------+-------+
6 rows in set (0.00 sec)

mysql> insert into employees (emp_no, birth_date, first_name, last_name, gender, hire_date ) values ( 500000, "1970-01-01", NULL, "YAMADA", "M", "2000-04-01" ) ;
Query OK, 1 row affected (0.01 sec)

mysql> select * from employees where emp_no="500000";
+--------+------------+------------+-----------+--------+------------+
| emp_no | birth_date | first_name | last_name | gender | hire_date  |
+--------+------------+------------+-----------+--------+------------+
| 500000 | 1970-01-01 | NULL       | YAMADA    | M      | 2000-04-01 |
+--------+------------+------------+-----------+--------+------------+
1 row in set (0.00 sec)

mysql> select emp_no, 
case when first_name IS NULL then 'UNKNOWN'
else first_name
end as first_name,
last_name
from employees
where emp_no between 499995 and 500000;

+--------+------------+-----------+
| emp_no | first_name | last_name |
+--------+------------+-----------+
| 499995 | Dekang     | Lichtner  |
| 499996 | Zito       | Baaz      |
| 499997 | Berhard    | Lenart    |
| 499998 | Patricia   | Breugel   |
| 499999 | Sachin     | Tsukuda   |
| 500000 | UNKNOWN    | YAMADA    |
+--------+------------+-----------+
6 rows in set (0.00 sec)

なお、employees(社員)テーブルのfirst_nameカラムにNULLを許可するため、以下のalter tableを実行しました。データ型以外が全てデフォルト設定となり、NULL許可に設定されます。

alter table employees modify column first_name varchar(14);

NULL判定には、=NULLではなく、IS NULL演算子を使用します。

【関連記事】
SQL isnullの使い方 NULL判定やNULL置換の方法 case式でも対応可能

まとめ

ポテパンダの一言メモ
  • whenはcase式の条件指定を記述する
  • whenは複数指定が可能
  • whenでNULL判定をおこなう場合は、IS NULLを使用する

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

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

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

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

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

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

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

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

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

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

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