条件分岐: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)