みなさんこんにちは!フリーランスプログラマーのsatoです。
SQLを組んでいく中で
方法①基礎中の基礎!CASE式を使用する!
CASE式を使えば、非常に簡単に分岐処理を書くことができます。基本的に以下のように、条件式を書いて分岐を行います。
SELECT CASE WHEN [条件1] THEN [条件1を満たしたら表示する内容] ELSE [条件を満たしていなかったら表示する内容] END FROM [テーブル名];
「例えば点数ごとで表示を変更する」なんて処理を書くのならば以下のようになるでしょう。
SELECT name,point, CASE WHEN 80 <= point THEN "合格" ELSE "不合格" END FROM user;
簡単ですね!詳細は以下の記事にまとめていますので、ぜひ参考にしてみてください。
方法②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はオプションで、そのままコマンドを投げることが可能なので、各自環境のやり方を調べておきましょう。
またシェルスクリプトの基本的な文法がわからない人は、以下で学んでみてください。
まとめ
今回は非常に簡単にですが、SQL上でのIF文のような分岐処理のやり方を見てきました。
特に最後のシェルスクリプトでの対応方法は、実践での緊急時に、お世話になることも多いでしょう。より高みを目指す方は、一つの技術としてぜひともマスターしておきましょう。