case式について
case式とはSQLで条件分岐するための関数です。
JavaやPHPなどで条件分岐する時に使用しているcaseと何ら違いはなく、「〇〇の時はAの処理!」「〇〇はBの処理!」というような指定をすることができます。
CASE カラム名
WHEN 条件式 THEN "一致した時の値"
WHEN 条件式 THEN "一致した時の値"
ELSE "条件のどれとも一致しない時の値"
END
使用方法
case式はSELECT句、WHERE句、ORDER BY句、GROUP BY句など様々な場面で使用できます。
どんな時でも使えるのがケース式です。
SELECT句
--取得してきたageカラムの値を成人か未成年として表示
SELECT name,
CASE age
WHEN age > 19 THEN '成人'
WHEN age < 20 THEN ' 未成年'
ELSE "年齢不詳"
END
FROM SYAIN;
WHERE句
--Aのカラムが未来のものだけ取得
SELECT * FROM DUAL
WHERE (CASE WHEN SYSDATE < DATE THEN "未来" END) = A;
GOURP BY
SELECT * FROM BUSYO
ORDER BY case busyo_name WHEN busyo_name = "営業" THEN 1
ELSE 2;
本来の並びであれば{1:総務部、2:開発部、3:サービス、4:営業}のところをORDER BY句にケース式を使うことで、営業を一番上に取得することができます。
混同しがちなIF文
PL/SQLなどのSQLを扱うためのプログラミング言語などで使用されるIF文とcase式は混同されがちです。
IF文とcase式はどちらも条件分岐を行なう為の予約後なのですが、名前に文と式の違いがある通り、たくさんの文の中で条件分岐をする為のIF文と一つの文の中で条件分岐をするためのcase式という違いがありまする。
簡単に言うと手続き型言語で使用するのがIF文。非手続き型言語でしようするのがcase式。ということになります。
イメージとしては、SQL文などでSELECT文などを下記のように1回づつ実行していく感じです。
SELECT * FROM DUAL;
手続き型言語:
大量のプログラムを一度に実行できる言語のこと。
EX)Java、PHP、PL/SQL、非手続き型言語:
一つの命令文を1回づつ実行していく言語のこと。
EX)SQL、C言語
大量のプログラムを一度に実行できる言語のこと。
EX)Java、PHP、PL/SQL、非手続き型言語:
一つの命令文を1回づつ実行していく言語のこと。
EX)SQL、C言語
上級者はcase式
「上級者はWHERE句で条件を指定するのではなく、ケース式をSELECT句で使用する」と先輩に言われました。
そのレベルまで行けるようにがんばりまする。