【SQL】複雑な条件にも対応できるCASE式について解説。
  • facebookページ
  • twitterページ
  • 2020.07.02

    【SQL】複雑な条件にも対応できるCASE式について解説。

    UPDATEを実行する際に「複数のレコードで複数のカラムのデータ」を一度に変更したいと思ったことはありませんか?

    SQLに慣れていない人のコードを見てみると、UPDATE文をカラム毎に作成しそれをループさせて回す方法が使われていることがあります。

    しかしCASEを使うことでもう少し簡単に一つのクエリで複数のレコードで複数のカラムのデータを同時に変更することが出来ます。

    そこで今回は「CASEを使って複数のデータを同時にUPDATEする」方法について解説してみたいと思います。

    CASEとは

    まずは「CASE」についての説明をしていきます。

    CASEは多言語で使用されている条件分岐ですが、どのプログラム言語でもCASEを使う際には「条件がAに当てはまればAルート、Bに当てはまればBルートを実行する」という形で使用します。

    プログラミングの際に「switch~case」という命令を記述した経験がある方も多いのではないでしょうか。

    このCASEですが、もちろんSQLでも使用できます。

    しかしSQLでは他のプログラム言語と違い、「switch文」というものはありません。

    switch部分にあたるワードがCASEになり、CASEにあたる部分は”THEN”というワードに置き換えられます。

    この辺りは次の工程で解説していきますので、今はまだワードだけ覚えておく程度で構いません。

    CASE式の使い方

    それではSQLにおけるCASE式の使い方について解説していきます。

    今回はUPDATEでのCASE式の使い方なので、サンプルなどの記述も全てUPDATEで揃えて解説していきます。

    CASEは様々なクエリで使用できるため、UPDATEのみ使用可能だと勘違いしないようにしてください。

    CASE式の記述方法については次の通りです。

    CASEでカラムを指定し「WHEN」と「THEN」を使ってルートを指定します。

    ELSEは必要に応じて付けることが可能ですが、必ずしもつけなければいけないということはありません。

    ではサンプルコードで見てみましょう。

    サンプルコードで使用するテーブルは以下の通りです。

    今回のサンプルでは職業(job)に応じて給与(salary)の設定を行っています。

    それでは早速見てみましょう。

    今回のサンプルではルートを3通り作りそれぞれの職種に対して給与設定を行いましたが、実行結果を見てみると全てのレコードが条件毎に変更されていることが確認できます。

    CASEの入れ子

    CASE式は入れ子にすることも出来ます。

    入れ子にする場合には以下のようにします。

    このようにすることで、「条件Aに該当するものは更にその下の条件分岐で判断、条件Bに該当するものは更にその下の条件分岐で‥‥」と詳細な条件設定が可能となります。

    また入れ子にする場合に階層に制限はありません。

    しかし階層を深くし過ぎると返って解り難くなってしまうため、多くても3階層(入れ子2個)までに留めておいた方が良いでしょう。

    CASE式とワイルドカード

    CASE式にはワイルドカードも使用することが出来ます。

    ワイルドカードといえばLIKE句ですが、先ほどのテーブルを例にLIKE句を使ったCASE式を記述すると次のようになります。

    ワイルドカードを使用して曖昧検索をかけた「Alex」と「Tomath」及びどの条件にも一致しなかった場合の処理がそれぞれ実行されていることが確認できます。

    CASE式ではこのように様々な式を記述することが可能です。

    まとめ

    今回は「CASEを使って複数のデータを同時にUPDATEする」について解説してきましたがいかがでしたか?

    CASE式はWHEREより便利で使い勝手が良いものとなっていますが、多用したり深い階層迄を一度にこなそうとすると返って解り難くなってしまう傾向があります。

    そのあたりをしっかりと理解したうえでこの記事を読んで使い方をマスターしてみてください。



    優良フリーランス案件多数掲載中!
    フリーランスエンジニアの案件をお探しなら
    ポテパンフリーランス

    この記事をシェア

    • Facebookシェア
    • Twitterシェア
    • Hatenaシェア
    • Lineシェア
    pickup









    ABOUT US

    ポテパンはエンジニアと企業の最適なマッチングを追求する企業です。

    READ MORE