【MySQL】ストアドルーチンを使えばクエリ内でif文が可能になる!
  • facebookページ
  • twitterページ
  • 2019.12.31

    【MySQL】ストアドルーチンを使えばクエリ内でif文が可能になる!

    プログラミングの学習で恐らく一番最初に触れる物と言えば”if文”ではないでしょうか。

    MySQLではストアドルーチンの中でのみif文を使うことが許されています。

    今回はこの「MySQLでif文を使う」をテーマに解説していきます。

    ストアドルーチンとは

    “ストアドルーチン”とは、「ストアドプロシージャ」と「ストアドファンクション」の2種類で構成されるSQLのことです。

    データベース内に名前を付けて格納しておけるのが特徴であり、これを発行しておくことで手軽に呼び出せます。

    使い回すようなクエリであれば、毎回冗長なクエリを記述するよりストアドルーチンを使う方が格段に効率が上がります。

    また通常のSQLで使用できないような条件分岐やループ処理、変数定義などが使用できるようになるので、プログラミングをしているかのように自由度の高い記述が可能になります。

    「ストアドプロシージャ」と「ストアドファンクション」

    この二つについて簡単に解説していきます。

    ストアドプロシージャとストアドファンクションは同じような動作が期待できますが、厳密な違いがあります。

    ストアドプロシージャは戻り値が無いのに対し、ストアドファンクションには戻り値が存在します。

    今回はこれらの具体的な使用方法には触れませんが、双方ともに使い方が若干異なりますので、必要に応じて調べてみてください。

    MySQLでif文を使う方法

    ここからが本題ですが、今回は解説するにあたり「ストアドファンクション」を使用して解説していきます。

    ストアドファンクションの知識が無い方は予め簡単に学習しておいた方がより理解し易くなるので、ストアドファンクションについて書かれている別記事にも目を通してみてください。

    それでは早速ですが、MySQLでif文を使う方法について解説していきます。

    MySQLでif文を使うためにストアドファンクションを使用しますが、このストアドファンクションは以下のように定義します。

    if文は先ほど説明した通り、ストアドファンクション内でのみ使用可能ですので、「一連の処理を記載」の部分で使用します。

    またMySQLでのif文の定義は以下の通りとなります。

    RETURNにはif文の戻り値を変数に格納したものが入ります。

    それでは実際にコードを見ていきましょう。

    今回は予め作っておいたデータベーステーブル「sample_table」を使用しますが、その中身は以下の通りです。

    また今回は「MySQLでif文を使う方法」の解説なので、比較的簡単な条件分岐で解説していきたいと思います。

    以下のコードはこれから使う式をわかりやすくプログラミング言語(Java)で書いたものです。

    実行結果

    上のコードは配列”num_left”と配列”num_right”を比較して、”num_left”が大きければ「left is big !」、”num_right”が大きければ「right is big !」、同じなら「even…」と表示させるだけの条件分岐です。

    これをMySQLのストアドファンクションで記述すると以下のようになります。

    Javaで記述したコードの方は、今回は記述を避けて配列を代入していますが、本来であればデータベースに接続し更にそこからデータを引っ張り出してその情報を変数に代入して・・・というような作業がある為、冗長なコードになりがちです。

    一方MySQLでの記述であれば、データベースから直接データを取り出して使えるため、冗長なクエリにならずに済んでいることが確認できると思います。

    このことからデータベースから情報を引っ張り出して使い回すようなコードであれば、直接データベース内で完結させておくというのも手段の一つであると言えます。

    またデータベースで全てを完結させてしまうとサーバー負荷が高くなると指摘を受けるかもしれませんが、アプリケーションで負荷をかけるかサーバーで負荷をかけるかの違いなので、どちらでも余り変わらない結果となることが多いようです。

    まとめ

    いかがでしたか?

    今回はMySQLでif文を使う方法について解説してみました。

    MySQLクエリで完結させるメリットもありますので、データベースについても一通り学習しながら各言語の学習を並行して進めることをお勧めします。



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

    この記事をシェア

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









    ABOUT US

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

    READ MORE