技術広報のyayawowoです。
SQLで条件分岐を用いるには、どのように記述すれば良いでしょうか?
今回は、SELECT文やUPDATE文で利用する条件分岐方法として、「CASE式」をご紹介します!
CASE式の使い方を習得いただくため、お手元で実行可能なSQL文付きで解説します。
是非、実践しながら習得ください!
※本説明では、PostgreSQL 9.6を利用します。
◆ 【SQL入門】PostgreSQL 関連記事
・【SQL入門】INSERT まとめ
・【SQL入門】UPDATE まとめ
・【SQL入門】DISTINCT 使い方
・RDBMSとDBMSについて【初心者向け】
・SQLの基本【まとめ】
・【RDBMS】PostgreSQLインストール・コマンド入門編
テーブルの準備
まず、CASE式の解説に入る前に今回使うテーブルを作成します。
テーブルの列定義とCREATE文は以下の通りです。
◆ 列定義
列名 | データ型 | PK |
---|---|---|
animal_no | integer | ○ |
animal_name | text | |
animal_breed | text | |
animal_sex | text |
◆ SQL文
--テーブル作成SQL文 CREATE TABLE sample_animal ( animal_no integer primary key, animal_name text, animal_breed text, animal_sex text );
上記の通り、テーブルが完成しましたのでデータも入れていきたいと思います。
◆ SQL文
--SQL文:データ追加 INSERT INTO sample_animal (animal_no, animal_name, animal_breed, animal_sex) VALUES (1, '犬', '柴犬', '女'); INSERT INTO sample_animal (animal_no, animal_name, animal_breed, animal_sex) VALUES (2, '犬', '柴犬', '男'); INSERT INTO sample_animal (animal_no, animal_name, animal_breed, animal_sex) VALUES (3, '犬', 'チワワ', '男');
◆実行結果
animal_no | animal_name | animal_breed | animal_sex |
---|---|---|---|
1 | 犬 | 柴犬 | 女 |
2 | 犬 | 柴犬 | 男 |
3 | 犬 | チワワ | 男 |
データ準備までできましたので、早速CASE式の説明に入っていきたいと思います!
CASE式をマスターしよう
CASE式の基本的な使い方
まずは、CASE式の基本的な使い方をご説明します。
基本的な書式は以下の通りです。
SELECT文を用いてテーブル検索をする際に、良く利用します!
◆ 書式
SELECT *, CASE [条件の対象となるカラム名] WHEN [条件A] THEN [処理A] WHEN [条件B] THEN [処理B] WHEN [条件C] THEN [処理C] ELSE 処理D END FROM [テーブル名];
「WHEN」の後に条件式を記載し、「THEN」の後にその条件を満たした際の処理を記述します。
「ELSE」には、どの条件式にも当てはまらない際の処理を書きましょう!
また、最後にENDで閉じるのをお忘れなく!
では、上記の書式を使って先ほど作成したテーブルを検索してみます。
柴犬なのか、柴犬以外なのかをCASE式を利用して見てみます。
◆ 例1
animal_breedが「柴犬」👉「柴犬です」と表示
それ以外👉「柴犬以外です」と表示
◆ SQL文
--CASE式:柴犬判定 SELECT animal_no,animal_name, CASE animal_breed WHEN '柴犬' THEN '柴犬です' ELSE '柴犬以外です' END FROM sample_animal;
◆実行結果
animal_no | animal_name | case |
---|---|---|
1 | 犬 | 柴犬です |
2 | 犬 | 柴犬です |
3 | 犬 | 柴犬以外です |
上記の通り、正しく検索ができましたでしょうか?
式を使った場合
先ほどのCASE式は、WHENの後に指定した条件と要素が=(イコール)の際に利用する記述方法です。
こちらの記述方法以外に、条件に式を書いて判定する方法もあります。
条件に式を使った例は、以下の通りです。
CASEの後ろに[条件の対象となるカラム名]
を記載しておりましたが、式を使う場合は不要です。
◆ 例2
animal_noが3以上 👉「柴犬以外です」と表示
それ以外👉「柴犬です」と表示
◆ SQL文
--CASE式:柴犬判定(式を使った場合) SELECT animal_no,animal_breed, CASE WHEN 3 <= animal_no THEN '柴犬以外です' ELSE '柴犬です' END FROM sample_animal;
◆実行結果
animal_no | animal_breed | case |
---|---|---|
1 | 柴犬 | 柴犬です |
2 | 柴犬 | 柴犬です |
3 | チワワ | 柴犬以外です |
曖昧判定(LIKE句)を使った書き方
CASE式の条件式では、LIKE句を使うことでワイルドカードを利用できます。
早速例題を見てみましょう!
◆ 例3
animal_breedに「柴」がつく👉「柴犬です」と表示
それ以外👉「柴犬以外です」と表示
◆ SQL文
--CASE式:柴犬判定(LIKE句を使った場合) SELECT animal_no,animal_breed, CASE WHEN animal_breed LIKE '%柴%' THEN '柴犬です' ELSE '柴犬以外です' END FROM sample_animal;
◆実行結果
animal_no | animal_breed | case |
---|---|---|
1 | 柴犬 | 柴犬です |
2 | 柴犬 | 柴犬です |
3 | チワワ | 柴犬以外です |
チワワの場合は、「柴犬以外です」と判定されていることが分かると思います。
また、LIKE句にて利用する検索方法を一覧にてまとめましたので、こちらもご参考ください。
検索名 | 検索方法 |
---|---|
前方一致検索 | LIKE '●%' |
後方一致検索 | LIKE '%●' |
部分一致検索 | LIKE '%●%' |
完全一致検索 | LIKE '●' |
否定検索 | NOT LIKE '%●%' ※部分一致にて否定検索する際の記述 |
複数の条件分岐を使った書き方
複数の条件を入れ子(CASE式の中にCASE式)構造にして、記述することもできます。
◆ 例4
条件① animal_sexが「男」 且つ、
条件②
animal_breedが「チワワ」👉「人気」と表示
それ以外👉「おすすめ」と表示
それ以外👉「定番」と表示
◆ SQL文
--CASE式:複数条件での判定 SELECT animal_no,animal_breed,animal_sex, CASE animal_sex WHEN '男' THEN CASE animal_breed WHEN 'チワワ' THEN '人気' ELSE 'おすすめ' END ELSE '定番' END FROM sample_animal;
◆実行結果
animal_no | animal_breed | animal_sex | case |
---|---|---|---|
1 | 柴犬 | 女 | 定番 |
2 | 柴犬 | 男 | おすすめ |
3 | チワワ | 男 | 人気 |
いかがでしょうか?
CASE式を入れ子構造にすることで、複数条件を指定した処理を実現することができます。
用途に応じて使い分けてください。
CASE式をUPDATEでも使ってみよう
CASE式は、UPDATE文でも利用可能となっております。
早速以下例題をやって、理解を深めてみましょう。
◆ 例5
animal_sexが「女」👉「男」
それ以外👉「女」
現在テーブルに登録されているanimal_sex(性別)を変更します。
◆ 変更前の結果
animal_no | animal_name | animal_breed | animal_sex |
---|---|---|---|
1 | 犬 | 柴犬 | 女 |
2 | 犬 | 柴犬 | 男 |
3 | 犬 | チワワ | 男 |
では、UPDATEをかけていきます。
◆ SQL文
--CASE式:UPDATE文への応用 UPDATE sample_animal SET animal_sex = CASE animal_sex WHEN '女' THEN '男' ELSE '女' END; --全件検索 SELECT * from sample_animal;
◆ 変更後の結果
animal_no | animal_name | animal_breed | animal_sex |
---|---|---|---|
1 | 犬 | 柴犬 | 男 |
2 | 犬 | 柴犬 | 女 |
3 | 犬 | チワワ | 女 |
性別が正しく更新されましたでしょうか?
CASE式は、SELECT文だけでなく、UPDATE文でも応用することができますので覚えておきましょう。
CASE式 まとめ
いかがでしたでしょうか?
今回は、SQL入門としまして『CASE式 まとめ』をご紹介させていただきました。
実際にお手元でSQLを動かすことで、より理解を深めることができたのではないでしょうか。
改めまして、本記事がCASE式を学ぶ方にとって、少しでもお役たてれば幸いです。
最後までお読みいただきありがとうございました!
エンジニア中途採用サイト
ラクスでは、エンジニア・デザイナーの中途採用を積極的に行っております!
ご興味ありましたら是非ご確認をお願いします。
https://career-recruit.rakus.co.jp/career_engineer/カジュアル面談お申込みフォーム
どの職種に応募すれば良いかわからないという方は、カジュアル面談も随時行っております。
以下フォームよりお申込みください。
rakus.hubspotpagebuilder.comラクスDevelopers登録フォーム
https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/イベント情報
会社の雰囲気を知りたい方は、毎週開催しているイベントにご参加ください!
◆TECH PLAY
techplay.jp
◆connpass
rakus.connpass.com