SQLのWITH句で可読性アップ!再帰共通表式でサクッとSQL文を書く
  • facebookページ
  • twitterページ
  • 2019.11.18

    SQLのWITH句で可読性アップ!再帰共通表式でサクッとSQL文を書く

    1つのSQL文の中に、重複するサブクエリが何度も登場すると可読性を下げる原因となります。そこで積極的に使用したいのがSQLのWITH句。MySQLでも8.0で使用できるようになり、知名度を一気に上げました。

    今回の記事ではSQLのWITH句とは何かについて詳しく解説をしつつ、SQLのWITH句を使ったハンズオンを実施していきます。

    本記事の要点
    • SQL WITH句は、再帰共通表式を作るもの
    • 再起共通表式とは、式の中で何度も呼び出せる即席テーブルのこと
    • WITH句を使ってハンズオンを体験してみる

    SQLのWITH句とは?

    SQLのWITH句とは、1つのSQL文の中で共通した表式(テーブル)を簡略的に呼び出すことができる句のことです。そのため、SQLのWITH句で呼び出したテーブルのことを再帰共通表式(テーブル)と呼びます。

    言葉だけではイメージがしづらいかと思うので、実際にSQLのWITH句を使用した例を見てみましょう。

    前提として、以下のようなテーブルがあるとします。

    このテーブルの中から、nameカラムだけを取り出した再帰共通表式をWITH句を使って生成して見ましょう。

    以下が出力結果です。

    foodsテーブルからnameカラムだけを取り出した「food_name」という再帰共通表式を作成することができました。WITH句から始めるSQL文において「food_name」という再帰共通表式は何度でも使用することができます。そのためサブクエリ(副問い合わせ)を使用して、何度も同じテーブル呼び出しをしなくてよく、可読性が高まるというわけです。

    ポテパンダの一言メモ

    上記の例ではWITH句の利便性を十分に感じられなかったかもしれません。次にご紹介する例では実際にWITH句の効果を感じられるようなハンズオンをご紹介していきますので、手を動かしながら体験して見ましょう。

    SQLのWITH句を使ってみよう

    では、実際にSQLのWITH句を使っていきましょう。

    ポテパンダの一言メモ

    こちらではMySQLというデータベースを使用していきます。MySQLではバージョン8.0からWITH句が導入されていますので、バージョンを確認してからハンズオンに入っていきましょう。

    準備

    まずはMySQLを使用するための準備をしていきます。

    MySQLのインストール・接続

    まだMySQLをインストールしていない場合は、インストールしましょう。

    MySQLのインストールが終了したら、接続します。

    データベースの作成

    次にデータベースをMySQL上に作成し、使用するデータベースを指定しましょう。

    これでMySQLを使用する準備は完了しました。

    テーブルの作成

    まずは状態テーブル・商品テーブルの2つを作成します。状態テーブルの「状態」1の時は「賞味期限前」、2の時は「賞味期限切れ」という形で商品を管理していきます。

    そして商品コードごとに、賞味期限切れの商品数と賞味期限前の商品数を月ごとに表示していきましょう。

    以下が作成されたテーブルです。

    状態テーブル

    商品テーブル

    レコードの作成

    テーブルにレコードを挿入していきましょう。

    これでテーブルは以下の状態になりました。

    状態テーブル

    商品テーブル

    非常に長いですが、ポイントとして最初にWITH句で生成したcheck_tableがその後、何度も呼び出されているという点に注目しましょう。WITH句を使うと、サブクエリを入力しなくても再帰的に共通テーブルが呼び出せるというわけです。

    まとめ

    今回の記事ではSQLのWITH句とは何かについて詳しく解説をしつつ、SQLのWITH句を使ったハンズオンを実施していきました。

    同じテーブルを何度も呼び出さなければならない場合、サブクエリを使用するよりも、1度呼び出せば何度も共通表式として呼び出せるWITH句がおすすめです。積極的にSQL文の中で使用し、可読性の高い式を記述できるようにしましょう。



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

    この記事をシェア

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









    ABOUT US

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

    READ MORE