RAKUS Developers Blog | ラクス エンジニアブログ

株式会社ラクスのITエンジニアによる技術ブログです。

【SQL入門】CASE式 まとめ

技術広報の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式を学ぶ方にとって、少しでもお役たてれば幸いです。
最後までお読みいただきありがとうございました!


◆TECH PLAY
techplay.jp

◆connpass
rakus.connpass.com

Copyright © RAKUS Co., Ltd. All rights reserved.