SQL

SQL – CASE式による条件分岐(WHERE句より便利かも)

1+

SQL文は関数だけでなく、式も使えます

計算式

例えば、SELECT文では下記のような使い方ができます。

UPDATE文だとこんな感じ。

演算子

算術演算子

よく使われるものを以下の通り。

使い方 役割
数値 + 数値 数値同士の足し算
日付 + 数値 日付を数値分だけ進める
数値 – 数値 数値同士の引き算
日付 – 数値 日付を数値分だけ過去に戻す(過去の特定の日に遡って処理したいときなどに使う)
日付 – 日付 日付の差の日数を取得(経過日数を知りたい時などに使う)
数値 * 数値 数値同士の掛け算
数値 / 数値 数値同士の割り算
文字列 || 文字列 文字列を連結する(DBMSによっては「+」でもOK)

CASE式

CASE式は、SQLで条件分岐をする上でとても便利な式。CASE式はあくまで式なので、CASE式は実行された時には評価されて、1つの値に定まる。よって、CASE式はSELECT文、WHERE句、GROUP BY句、HAVING句、ORDER BY句、CHECK制約中、等々様々な場面で記述することができる。

ENDとELSEの書き忘れには注意すること!ELSEを書かないとELSE NULLという扱いを受けるので、NULLが値として入ってしまう。

基本的なCASE式の書き方は2通り。

検索CASE式を使った例文は下記の通り

このSQL文は下記のような表として返ってくる。

支出用途 支出額 支出の分類
食費 1000 変動費
居住費 80000 固定費
水道光熱費 7500 固定費

色々なCASE式

サンプル①

上記のSQL文はざっくり言うとこんな感じで集計される。

サンプル②異なる条件の集計を1つのSQLでやる(集計関数内にCASE式)

上記のSQL文はざっくり言うとこんな感じで集計される。

サンプル③CASE式を使ったUPDATE文

上記のSQL文はざっくり言うとこんな感じで集計される。

WHERE句を使ってUPDATE文を2回書いても良いが、今回のように2つの条件式を同時に処理したいときは不向き。また1回のSQL文で済むので便利。

サンプル④(テーブルのマッチング)

上記のSQL文はざっくり言うとこんな感じで集計される。

これはEXISTSを使ってこんなふうにも書ける

 

 

 

1+
ABOUT ME
chopes
前職では、人材業界で法人営業・キャリアアドバイザー・大阪責任者をしていました。他にも、新入社員の研修策定と育成、面談者の集客におけるスカウト業務や中途採用の面接官、新卒採用の2次選考官、インターンシップのメンターとしてプログラムに参加していました。退職後は、未経験でエンジニアになるためにスクールに通学して勉強。2ヶ月の転職活動を経て、今春からRailsエンジニアとして第二のキャリアを歩むことになりました。主に学習記録や未経験エンジニアについてアウトプットしていきたいと思います! 以下、Twitterアカウントですので、気軽にフォローしてください! Twitter:@chopesu_se