- 更新日: 2017年04月05日
- 公開日: 2015年12月08日
ゼロから始めるPHP講座Vol.37 データーベースの便利機能
ゼロから始めるPHP講座 データーベースの便利機能
様々な便利機能
データベースには目的のデータを取り出すため、様々な便利機能が用意されております。例えば既に学んだORDER BY句によるソート機能もその1つです。
便利な機能は非常に数多くありますが、今回はよく利用する以下機能について紹介します。
- 演算
- AS
- COUNT
- GROUP BY
様々な機能を組み合わせて使うことで、データベースに格納したデータをより有効的に活用できるようになります。
演算
SELECT文でデータを取得する際、カラムの値に対して演算を行い、その結果を取得することが可能です。以下の例をphpMyAdminにて実行し、結果を確認してみましょう。
例) 「単価(price) * 1.05」を取得
カラム名は「price * 1.05」と、SELECT文に書いた内容がそのまま表示され、各レコードの値は演算した結果となります。
演算はカラム同士で行うこともできます。次の例をphpMyAdminにて実行し、結果を確認してみましょう。
例) 「単価(price) * 数量(quiantity)」により、合計金額を取得
正規化の際に削除した「合計金額」を表示できました。
また、データベースにもPHPと同様に「関数」が用意されており、例えばSUM関数を利用することで、カラムの値の合計値を求めることも可能です。
SELECT SUM(カラム名) FROM テーブル名
例)売上数量(quantity)の合計値を取得
指定したカラムの合計値が表示されます。
今回は紹介しませんが、四則演算や合計(SUM)の他にも平均や余り、四捨五入など、様々な演算を行うことが可能です。
このようにデータベースでの演算は便利ですが、
アクセスが多いページでPHPプログラムから演算を行うSQL実行は原則禁止
です。
例えば合計金額をWebページに表示したい場合、単価(price)と数量(quiantity)をSQLでデータベースから取得し、PHPでこの2つの掛け算を行います。
同じ演算処理なのに、なぜデータベースがダメでプログラムなら良いのか、具体的な話は難しくなるため割愛しますが、プログラムとデータベースのどちらでもできることは、プログラムに処理を任せるのが一般的です。
データベース上での演算は、phpMyAdmin上でデータを検索する際などに利用すると覚えておいてください。
AS
SELECT文でデータを取得する際、AS句を使うことでカラム名やテーブル名に対して別名をつけることができます。
例えばカラム名を変更するSQLは以下となります。phpMyAdminにて実行し、結果を確認してみましょう。
例) 「単価(price) * 数量(quiantity)」により、合計金額を取得
表示される際、カラム名が「total」とAS句の後に書いた別名になりました。
同じように、テーブル名にも別名をつけることができます。先ほどのSQLでテーブル名も別名をつけ、phpMyAdminにて実行し、結果を確認してみましょう。
例) 「単価(price) * 数量(quiantity)」により、合計金額を取得
表示される結果は同じです。テーブル結合を行う場合、テーブル名を複数箇所で使用する必要がありSQLが長くなりがちですが、AS句で別名をつけることで、SQLを短くすることができます。
AS句は別名をつけるだけなのでSQLの結果に変わりはありませんが、結合するテーブル数や条件が多くなるほどSQLは長くなりますので、上手にAS句を活用しましょう。
COUNT
行数をカウントするにはCOUNT関数を利用します。例えば商品テーブル(goods_table)の行数を調べることで、商品がいくつあるのかが分かります。 実際にgoods_tableの行数をカウントするSQLをphpMyAdminにて実行し、結果を確認してみましょう。
顧客数、商品数、発注数、etc. と、レコード行数を取得することは多々ありますので、COUNT関数は是非覚えておきましょう。
GROUP BY
GROUP BY句を利用することで、特定のカラムで同じ値を持つデータをまとめることができ、これをグループ化と言います。 例えば発注(order_table)の支払方法(payment)でデータをまとめ、それぞれの件数を表示するSQLは以下となります。phpMyAdminにて実行し、結果を確認してみましょう。
グループ化を図で表すと、次のようになります。 [クレジット][代金引換]とpaymentの値がグループ化されました。クレジットは3件、代金引換は1件と、COUNT関数によりそれぞれのグループの件数が分かります。
グループ化を行うと、COUNT関数で各グループの行数カウントの他、グループごとでカラムの値を合計や平均など演算ができます。
例えば発注詳細(order_detail_table)にて、商品(goods_id)毎の売上数量(quantity)の合計を取得するSQLは次のようになります。 phpMyAdminにて実行し、結果を確認してみましょう。
goods_idでグループ化を行い、各グループの数量(quantity)の合計をSUM関数により計算しています。
課題
前回の「ゼロから始めるPHP講座 データーベースの結合〜3つ以上のテーブル結合〜」にて作成した商品の発注に関する情報を第3正規化した以下テーブルより、次に指定したデータを取得するSQLを作成し、phpMyAdminより実行してください。
顧客毎の発注回数を取得し、名前と合わせて表示してください。
値段が100円の商品に関して商品毎の売上数量を取得し、商品名と合わせて表示してください。
顧客毎の発注した全商品の合計金額を取得し、名前と合わせて表示してください。
NEXT LESSON ☛ トランザクション基礎
PREV LESSON ☛ データーベースの結合〜3つ以上のテーブル結合〜
- この記事を書いた人
- CodeCampus編集部