【SQL超入門講座】21.CASE|条件に合わせて処理を分ける方法

オススメ

皆さんはSQLでカラムの値に応じて異なる値を入力したり、フラグを立てたりしたい時がありませんか?
例えば、生徒のテストの点数が記録されたこちらのテーブルを見てください。
合否のカラムを作成し、生徒のテストの点数が3点以上であれば合格、それ以外は不合格と入力します。
このような時、どのように入力すればいいと思いますか?
プログラミングを学習したことがある人は、If Else構文による条件分岐を思いつくのではないでしょうか?
SQLではIf Else構文のような条件分岐を、Case式を使って行うことができます。
今回、例として出した点数に応じた合否の入力も、Case式を使えば簡単です。
Case式を覚えることで、複雑な条件にも対応できるようになりますので、是非使いこなせるようになりましょう。

▼書き起こしブログ
https://kino-code.com/sql_21/

▼関連動画
【SQL超入門講座】01.コース紹介 ~ SQLとは? ~ 環境構築|初心者向け

【SQL超入門講座】01.コース紹介 ~ SQLとは? ~ 環境構築|初心者向け

【SQL超入門講座】02.データベースのテーブルとは?

【SQL超入門講座】02.データベースのテーブルとは?

【SQL超入門講座】03.SELECT文|SQLの基本中の基本

【SQL超入門講座】03.SELECT文|データベースからデータ抽出する方法

【SQL超入門講座】04.WHERE|特定の条件でデータを抽出する方法

【SQL超入門講座】04.WHERE|特定の条件でデータを抽出する方法

【SQL超入門講座】05.ORDER BY|データの並び替え

【SQL超入門講座】05.ORDER BY|データの並び替える方法

【SQL超入門講座】06.GROUP BY|グルーピング、グループ化

【SQL超入門講座】06.GROUP BY|指定したカラムの値を基準にデータを集計する方法

【SQL超入門講座】07.HAVING|グループ化したデータの中からデータ抽出

【SQL超入門講座】07.HAVING|グループ化したデータの中からデータ抽出

【SQL超入門講座】08.JOIN|テーブルの結合(INNER JOIN/LEFT JOIN)

【SQL超入門講座】08.INNER JOIN/LEFT JOIN|テーブル同士を結合する方法①

【SQL超入門講座】09.PostgreSQLの環境構築|MacとWindowsで解説!

【SQL超入門講座】09.PostgreSQLの環境構築|MacとWindowsで解説!

【SQL超入門講座】10.PythonとPostgreSQLの接続

【SQL超入門講座】10.PythonからPostgreSQLに接続する方法

【SQL超入門講座】11.データベースのバックアップと復元

【SQL超入門講座】11.データベースのバックアップと復元する方法

【SQL超入門講座】12.テーブルの結合(RIGHT JOIN/OUTER JOIN)

【SQL超入門講座】12.RIGHT JOIN/OUTER JOIN|テーブルの結合する方法②

【SQL超入門講座】13.AND, OR|複数条件で抽出する方法

【SQL超入門講座】13.AND, OR|複数条件で抽出する方法

【SQL超入門講座】14.LIKE|部分一致や前方一致、後方一致するレコードを抽出する方法

【SQL超入門講座】14.LIKE|部分一致や前方一致、後方一致するレコードを抽出する方法

【SQL超入門講座】15.BETWEEN|区間を指定して抽出する方法

【SQL超入門講座】15.BETWEEN|区間を指定して抽出する方法

【SQL超入門講座】16.LENGTH関数|文字数を条件にしてデータを抽出する方法

【SQL超入門講座】16.LENGTH関数|文字数を条件にしてデータを抽出する方法

【SQL超入門講座】17.DISTINCT|重複した値を排除して抽出する方法

【SQL超入門講座】17.DISTINCT|重複した値を排除して抽出する方法

【SQL超入門講座】18.SUBSTRING|文字列の一部を切り出す方法

【SQL超入門講座】18.SUBSTRING|文字列の一部を切り出す方法

【SQL超入門講座】19.正規表現|複雑なパターンマッチングを条件に抽出する方法

【SQL超入門講座】19.正規表現|複雑なパターンマッチングを条件に抽出する方法

【SQL超入門講座】20.ROUND|四捨五入を思いのままにできますか?

【SQL超入門講座】20.ROUND|四捨五入を思いのままにできますか?

▼自己紹介
ブログに自己紹介を書いております。

▼SNS
Twitter : https://twitter.com/kino_code/likes
Facebook : https://www.facebook.com/キノコード -105693727500005/
Website : https://kino-code.com/

▼書き起こし
SQLでIF ELSEのような条件分岐を行いたいときはCASE式を使用します。
CASE式には単純CASE式と検索CASE式の2種類があります。

単純CASE式ではカラムの値が指定した値と等価であるかを判定し、処理の分岐を行います。
一方で検索CASE式は、等価判定以外にもさまざまな条件で処理を分岐させることができます。

最初に単純CASE式と検索CASE式の構文を確認しておきましょう。

まず単純CASE式の構文を確認します。
“`
CASE カラム
WHEN 値1 THEN 結果1
WHEN 値2 THEN 結果2

ELSE 結果3
END
“`
単純CASE式では、まずCASEと書いた後に対象となるカラムを書きます。
続くWHEN句からELSE句でカラムの値に基づき処理を分岐します。
WHEN句で値を指定し、その値がカラムの値と等価である場合に返す結果を、THENの後に書きます。
等価でない場合に行う別の処理を、次のWHEN句に書いていきます。
そしてカラムの値が、WHEN句で指定した値のいずれにも一致しない場合に返す結果を、ELSE句に書きます。
最後にENDを書きCASE式を終了します。
単純CASE式については以上となります。

次に検索CASE式の構文を確認します。
“`
CASE
WHEN 条件式1 THEN 結果1
WHEN 条件式2 THEN 結果2

ELSE 結果3
END
“`

構造は単純CASE式と似ていますが、検索CASE式と単純CASE式ではいくつかの違いがあります。
一つ目の違いは、CASEの後に条件分岐の対象となるカラムを書かないことです。
二つ目の違いは、WHEN句で条件式を書いて、この条件式が真のときに返す結果をTHENの後に書くことです。

検索CASE式は単純CASE式と比べてより複雑な条件に基づいて分岐を行うことができ、単純CASE式を書き換えることもできます。
そのため検索CASE式だけを覚えていれば、条件分岐は問題ないように感じるかもしれません。
ただ単純CASE式も等価判定による条件分岐を可読性高く記述できる点では有用です。
是非単純CASE式と検索CASE式はどちらもしっかりと覚えておくようにしましょう。

## CASE式の使い方
ここからは具体的にテーブルを用いて、使い方を確認していきます。
まずデモテーブルのtest01を作成します。
test01は氏名、出席番号、数学の3つのカラムを持ったテーブルです。

|氏名|出席番号|数学|
|:-:|:-:|:-:|
|高橋|a001|1|
|伊藤|a002|2|
|鈴木|a003|3|
|佐藤|a004|4|

それでは数学の点数に基づいて成績を割り振りってみましょう。
成績の割り振りは数学の点数が、1であればC、4であればA、それ以外であればBとします。

単純CASE式を使う場合、次のようにSQLを書くことができます。
(続く)

#SQL #条件 #CASE #PostgreSQL

コメント

タイトルとURLをコピーしました