矢沢久雄 グレープシティ アドバイザリースタッフ

今回のキーワード
・SQLの関数

SQLの関数

 SQLには,数値データ型の列の合計値や平均値を求める関数が,あらかじめ準備されています。つまり,DBMSが皆さんに代わって計算を行ってくれるのです。このことを知っていないと,データを取得した皆さん自身が,合計や平均値を手作業で計算するという何とも無駄な作業をしてしまうことになります(無駄はいけません!)。表1に,SQLの主な関数を示しておきます。

関数名機能
SUM合計を求める
AVG平均を求める
COUNT行数を求める
MAX最大値を求める
MIN最小値を求める
表1●SQLの主な関数
図1●年齢の平均値

 以下は,現在のMeisiTblテーブル(行は3つになっています)のNenreiの平均値を求めるSQL文です。SELECTの目的語に関数を指定し,FROMの後にテーブル名を指定します。必要なら,WHERE節を追加して検索条件を指定することもできます。平均値を求めるAVG関数のカッコ内には,平均値を求める対象となる列(ここではNenrei)を指定します。実行結果は,図1[拡大表示]のようになります。

SELECT AVG(Nenrei) FROM MeisiTbl;

図2●新しいMeisiTblテーブルの構造
図3●ShumiTblの構造
図4●2つのテーブルの内部結合

複数テーブルの結合

 実際に使われているリレーショナル・データベースは,複数のテーブルから構成されているのが一般的です。これまでのデータベースを改造して,MeisiTblテーブル(名刺テーブル)とShumiTblテーブル(趣味テーブル)の2つのテーブルから構成されたものにしてみましょう。MeisiTblテーブルには,MeiID(主キー)とShuID(外部キー)という名前の列を新たに追加します(図2[拡大表示])。ShumiTblテーブルには,ShuID(主キー),Shumi(趣味を表す文字列)があります(図3)。主キーと外部キーに関しては,連載の第1回を参照してください。このデータベースでは,ShuIDという列で,2つのテーブルにリレーションが設定されるわけです。それぞれのテーブルには,適当なデータを手作業で挿入しておきます。

 ここで,ちょっと複雑な操作をしてみましょう。MeisiTblテーブルとShumiTblテーブルの関係する行を結合して1つのビューとして表すのです。この場合のSQL文は,以下のようになります。「テーブル名.行名」という形式(MeisiTbl.* やSuhmiTbl.ShuIDなど)で行を指定していることと,FROMの後にカンマで区切って2つのテーブルを指定していることに注意してください。SQL文の実行結果は,図4[拡大表示]のようになります。

SELECT MeisiTbl.*, ShumiTbl.*
FROM MeisiTbl, ShumiTbl
WHERE MeisiTbl.ShuID = ShumiTbl.ShuID;

 このように2つのテーブルを結合することを「内部結合」と呼びます。上記のSQL文に間違いはありませんが,内部結合であることを明示するSQL命令もあります。INNNER JOINです。上記のSQL文は,以下のように記述することもできます。実行結果は,同じです。

SELECT MeisiTbl.*, ShumiTbl.*
FROM MeisiTbl INNER JOIN ShumiTbl
ON MeisiTbl.ShuID = ShumiTbl.ShuID;

 SQL命令は,これまでに説明したものだけではありません。ただし,この連載で取り上げたSELECT,INSERT,UPDATE,DELETEの4つの命令だけを知っていれば,たいていのことは実現できます。次回(最終回)は,実際のデータベース・アプリケーション開発において,どのようにSQLが使われるかを説明します。お楽しみに!

◎今回の復習
・SQLにあらかじめ準備されている関数を使うと,列の合計値や平均値をラクに求められる