SQL:条件分岐、CASE式

条件分岐:CASE式

  • UNION ALL
    こちらを使っても条件式を書けるが、テーブルを2回読み込むので、
    処理速度が落ちるため、パフォーマンスの観点から良くない。

  • CASE
    こちらは、UNION ALL を向上させたもの。
    こちらを使うのが通説。

SELECT emp_no, birth_date,
  CASE WHEN birth_date BETWEEN '1950-01-01' AND '1959-12-31' THEN '50s'
    WHEN birth_date BETWEEN '1960-01-01' AND '1969-12-31' THEN '60s'
  END AS age
FROM employees
WHERE emp_no BETWEEN 10001 AND 10050
;

=> employeesテーブルにて、10001 <= emp_no <= 10050  のもとで
birth_date が1950年代なら、'50s'とし、また、
birth_date が1960年代なら、'60s'とするレコードを抽出する。
ただし、列名は、age とする。

+--------+------------+------+
| emp_no | birth_date | age  |
+--------+------------+------+
|  10001 | 1953-09-02 | 50s  |
|  10002 | 1964-06-02 | 60s  |
|  10003 | 1959-12-03 | 50s  |
|  10004 | 1954-05-01 | 50s  |
|  10005 | 1955-01-21 | 50s  |
|  10006 | 1953-04-20 | 50s  |
|  10007 | 1957-05-23 | 50s  |
|  10008 | 1958-02-19 | 50s  |
|  10009 | 1952-04-19 | 50s  |
|  10010 | 1963-06-01 | 60s  |
...
...
...
|  10045 | 1957-08-14 | 50s  |
|  10046 | 1960-07-23 | 60s  |
|  10047 | 1952-06-29 | 50s  |
|  10048 | 1963-07-11 | 60s  |
|  10049 | 1961-04-24 | 60s  |
|  10050 | 1958-05-21 | 50s  |
+--------+------------+------+
50 rows in set (0.04 sec)