実戦的にSQL文を条件分岐させる3つの方法!

みなさんこんにちは!フリーランスプログラマーのsatoです。

SQLを組んでいく中で

条件分岐したいなぁ
なんて時があると思います。今回はそんな条件分岐についてです。実践でよく発生する3パターンの状況ごとの分岐方法をまとめておきました。ぜひ参考にしてみてください。

方法①基礎中の基礎!CASE式を使用する!

CASE式を使えば、非常に簡単に分岐処理を書くことができます。基本的に以下のように、条件式を書いて分岐を行います。

SELECT
  CASE
      WHEN [条件1] THEN [条件1を満たしたら表示する内容]
      ELSE [条件を満たしていなかったら表示する内容]
  END
FROM [テーブル名];

「例えば点数ごとで表示を変更する」なんて処理を書くのならば以下のようになるでしょう。

SELECT
  name,point,
  CASE
      WHEN 80 <= point THEN "合格"
      ELSE "不合格"
  END
FROM user;

簡単ですね!詳細は以下の記事にまとめていますので、ぜひ参考にしてみてください。

【SQL】5分でわかるCASE式!SELECTもUPDATEも自在に条件分岐させよう
更新日 : 2019年4月6日

方法②NULLチェックだけならばIFNULL

分岐を行いたい理由として、よく発生するのがNULLだったらで分岐したい状況ではないでしょうか。その状況ではCASE式を使うまでもありません。IFNULLを使用すれば、簡単に実現できます。使い方は以下の通りです。

SELECT IFNULL([チェックする要素], [NULLだったときに表示する文字列]) FROM [テーブル名];

より具体的に見てみましょう。userテーブルの、名前がNULLのユーザーのみ「NoName」と表示したかったとしましょう。その場合は以下の通りです。

SELECT IFNULL(name, "NoName") FROM user;

方法③外部情報による分岐ならシェルスクリプトで!

例えば…

現在のサーバー変数などによって処理を分岐させたい
出力した結果の取得方法も分岐したい

などなど…さらに特殊なことをやる場合はどうすれば良いのでしょうか?その場合は、シェルスクリプトなどを組んで進めてしまうのが手っ取り早いでしょう。例えばMySQLでの書き方ならば、以下のような記述方法で分岐することができるでしょう。

以下は非常に簡単に、rootユーザーで、blog_testDBを適当にSELECTしてきている例です。

#!/bin/sh
NUM1=100
NUM2=200

if [ $NUM1 -lt $NUM2 ]; then
mysql -u root blog_test -e "select * from user;"
else
mysql -u root blog_test -e "select * from user limit 1;"
fi

今回やっていることは変数二つのどちらが大きいかで分岐しているだけの処理ですが…うまく使えば、様々な分岐のさせ方ができますね!SQLはオプションで、そのままコマンドを投げることが可能なので、各自環境のやり方を調べておきましょう。

またシェルスクリプトの基本的な文法がわからない人は、以下で学んでみてください。

【Linux入門】shellとは?作り方から実行方法までを解説!
更新日 : 2019年10月14日

まとめ

今回は非常に簡単にですが、SQL上でのIF文のような分岐処理のやり方を見てきました。

  • 方法①基礎中の基礎!CASE式を使用する!
  • 方法②NULLチェックだけならばIFNULL
  • 方法③外部情報による分岐ならシェルスクリプトで!
  • 特に最後のシェルスクリプトでの対応方法は、実践での緊急時に、お世話になることも多いでしょう。より高みを目指す方は、一つの技術としてぜひともマスターしておきましょう。

    LINEで送る
    Pocket

    SEからWebエンジニアへ転職した理由

    侍エンジニア塾卒業生の小池さんは、以前は社内SEとして約5年ほど勤務していました。しかし業務内容は社内のヘルプデスク対応など、プログラムを書く仕事は全くなかったそうです。

    SEながらプログラムを書けない現状に「将来仕事がなくなるんじゃないか」と不安を感じ、プログラミング学習を決意。

    弊社スクールで学習し、無事ベンチャー企業のプログラマーとして転職に成功しました。そんな小池さんの学習法や転職体験談を伺いましたので、是非ご覧ください。

    「プログラミングができないSEは仕事がなくなる」不安を感じたSEが未経験から転職成功するまで
    更新日 : 2019年10月7日

    書いた人

    sato

    sato

    学生時代を含めると、かれこれ10年以上プログラマーとして過ごしています。
    様々な言語や環境、プロジェクトに関わってきましたので、より実践的な記事をみなさんにお届きるよう情報発信していきます!

    おすすめコンテンツ

    あなたにぴったりなプログラミング学習プランを無料で診断!

    プログラミング学習の効率を劇的に上げる学習メソッドを解説