ゼロから始めるPHP講座Vol.37 データーベースの便利機能


ゼロから始めるPHP講座Vol.37 データーベースの便利機能
目次
  1. ゼロから始めるPHP講座 データーベースの便利機能
  2. 様々な便利機能
  3. 演算
  4. AS
  5. COUNT
  6. GROUP BY
  7. 課題

ゼロから始めるPHP講座 データーベースの便利機能

様々な便利機能

データベースには目的のデータを取り出すため、様々な便利機能が用意されております。例えば既に学んだORDER BY句によるソート機能もその1つです。

便利な機能は非常に数多くありますが、今回はよく利用する以下機能について紹介します。

  • 演算
  • AS
  • COUNT
  • GROUP BY

様々な機能を組み合わせて使うことで、データベースに格納したデータをより有効的に活用できるようになります。

演算

SELECT文でデータを取得する際、カラムの値に対して演算を行い、その結果を取得することが可能です。以下の例をphpMyAdminにて実行し、結果を確認してみましょう。

例) 「単価(price) * 1.05」を取得

php_DB_utility1-639

php_DB_utility2-639

カラム名は「price * 1.05」と、SELECT文に書いた内容がそのまま表示され、各レコードの値は演算した結果となります。

演算はカラム同士で行うこともできます。次の例をphpMyAdminにて実行し、結果を確認してみましょう。

例) 「単価(price) * 数量(quiantity)」により、合計金額を取得 php_DB_utility3-639

php_DB_utility4-639 正規化の際に削除した「合計金額」を表示できました。

また、データベースにもPHPと同様に「関数」が用意されており、例えばSUM関数を利用することで、カラムの値の合計値を求めることも可能です。

SELECT SUM(カラム名) FROM テーブル名

例)売上数量(quantity)の合計値を取得

php_DB_utility5-639

php_DB_utility6-639

指定したカラムの合計値が表示されます。

今回は紹介しませんが、四則演算や合計(SUM)の他にも平均や余り、四捨五入など、様々な演算を行うことが可能です。

このようにデータベースでの演算は便利ですが、

アクセスが多いページでPHPプログラムから演算を行うSQL実行は原則禁止

です。

例えば合計金額をWebページに表示したい場合、単価(price)と数量(quiantity)をSQLでデータベースから取得し、PHPでこの2つの掛け算を行います。

同じ演算処理なのに、なぜデータベースがダメでプログラムなら良いのか、具体的な話は難しくなるため割愛しますが、プログラムとデータベースのどちらでもできることは、プログラムに処理を任せるのが一般的です。

データベース上での演算は、phpMyAdmin上でデータを検索する際などに利用すると覚えておいてください。

AS

SELECT文でデータを取得する際、AS句を使うことでカラム名やテーブル名に対して別名をつけることができます。

php_DB_utility7-639 例えばカラム名を変更するSQLは以下となります。phpMyAdminにて実行し、結果を確認してみましょう。

例) 「単価(price) * 数量(quiantity)」により、合計金額を取得

php_DB_utility8-639

php_DB_utility9-639

表示される際、カラム名が「total」とAS句の後に書いた別名になりました。

同じように、テーブル名にも別名をつけることができます。先ほどのSQLでテーブル名も別名をつけ、phpMyAdminにて実行し、結果を確認してみましょう。

例) 「単価(price) * 数量(quiantity)」により、合計金額を取得 php_DB_utility10-639

php_DB_utility11-639

表示される結果は同じです。テーブル結合を行う場合、テーブル名を複数箇所で使用する必要がありSQLが長くなりがちですが、AS句で別名をつけることで、SQLを短くすることができます。

AS句は別名をつけるだけなのでSQLの結果に変わりはありませんが、結合するテーブル数や条件が多くなるほどSQLは長くなりますので、上手にAS句を活用しましょう。

COUNT

行数をカウントするにはCOUNT関数を利用します。例えば商品テーブル(goods_table)の行数を調べることで、商品がいくつあるのかが分かります。 php_DB_utility12-639実際にgoods_tableの行数をカウントするSQLをphpMyAdminにて実行し、結果を確認してみましょう。 php_DB_utility13-639

php_DB_utility-miss-639顧客数、商品数、発注数、etc. と、レコード行数を取得することは多々ありますので、COUNT関数は是非覚えておきましょう。

GROUP BY

GROUP BY句を利用することで、特定のカラムで同じ値を持つデータをまとめることができ、これをグループ化と言います。 php_DB_utility14-639例えば発注(order_table)の支払方法(payment)でデータをまとめ、それぞれの件数を表示するSQLは以下となります。phpMyAdminにて実行し、結果を確認してみましょう。

php_DB_utility15-639

php_DB_utility16-639

グループ化を図で表すと、次のようになります。 php_DB_utility17-639 [クレジット][代金引換]とpaymentの値がグループ化されました。クレジットは3件、代金引換は1件と、COUNT関数によりそれぞれのグループの件数が分かります。

グループ化を行うと、COUNT関数で各グループの行数カウントの他、グループごとでカラムの値を合計や平均など演算ができます。

例えば発注詳細(order_detail_table)にて、商品(goods_id)毎の売上数量(quantity)の合計を取得するSQLは次のようになります。 phpMyAdminにて実行し、結果を確認してみましょう。

php_DB_utility18-639

php_DB_utility19-639

goods_idでグループ化を行い、各グループの数量(quantity)の合計をSUM関数により計算しています。 php_DB_utility20-639

課題

前回の「ゼロから始めるPHP講座 データーベースの結合〜3つ以上のテーブル結合〜」にて作成した商品の発注に関する情報を第3正規化した以下テーブルより、次に指定したデータを取得するSQLを作成し、phpMyAdminより実行してください。 php_DB_utility21-639

顧客毎の発注回数を取得し、名前と合わせて表示してください。 php_DB_utility22-639

値段が100円の商品に関して商品毎の売上数量を取得し、商品名と合わせて表示してください。 php_DB_utility23-639

顧客毎の発注した全商品の合計金額を取得し、名前と合わせて表示してください。php_DB_utility24-639

NEXT LESSON ☛ トランザクション基礎

PREV LESSON ☛ データーベースの結合〜3つ以上のテーブル結合〜


CodeCampus編集部
この記事を書いた人
CodeCampus編集部
まずは7日間お試し!人気プログラミング講座を無料公開中
オンライン・プログラミングレッスンNo.1のCodeCamp