SQLのcase式を理解してしまった

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言語

上級者はcase式

「上級者はWHERE句で条件を指定するのではなく、ケース式をSELECT句で使用する」と先輩に言われました。

そのレベルまで行けるようにがんばりまする。

Twitterでフォローしよう

おすすめの記事