2010年05月12日

SQLの勉強

ブログのシステムが整わず、記事投稿を長らくお休みしていましたが、ようやく準備が整いましたので再開することになりました。
セミナーで頂いたご質問の紹介や、開発、IT関連ほか、色々書いていきたいと思っています。
どうぞよろしくお願いいたします。

大分前のセミナーになりますが、AccessのSQLの学習方法についてご質問を頂いたことがあります。
ブログでもSQLについて紹介していきたいとお約束していましたし、つい先日のセミナーでも類似のご質問を頂きました。
記事投稿の再開にあたりSQLの習得に関連することに少し触れてみたいと思います。

Accessはクエリの「SQLビュー」を使えば簡単にSQL文を調べることができますので、SQLの勉強はとかく後回しにされることが多いように思います。
私自身のことを振り返ってSQLを勉強しておいて分かりやすかったことと言えば、例えばSum関数などの利用方法です。

Excelを使う時のような感覚でレコードのフィールドの一つにCount関数やSum関数の結果を表示して演算に使用したくなる場合があります。
Sum関数だけを使って合計だけを求めるのであれば、例えば以下のようなSQL文で結果が求められます。

(例)
SELECT Sum([金額]) AS 売上 FROM T_受注;
(意味)
「T_受注」テーブルから、[金額]フィールドの合計を求め、「売上」というフィールド名で表示する。

ところが、この「SELECT」の後ろに他のフィールドを追加したとします。

(間違った例)
SELECT 受注ID, 金額, [金額]/Sum([金額]) AS シェア FROM T_受注;

気持ちとしてはExcel風に
「受注IDごとに、その売上金額のシェアを求めるつもり」
なのですが、このクエリ(SQL)を実行しようとすると次のようなエラーが返ってきます。

「集計関数の一部として指定された式'受注ID'を含んでいないクエリを実行しようとしました。」

ヘルプを見ると

「指定した式を集計関数やグループ化の一部として指定せずにクエリを実行しようとしました。」というエラー解説が出てきます。

集計関数とはSumやCountのような集計を行う関数のことです。

「集計関数の一部」として利用する方法とは、
以下の[数量]や[定価]のようにSum関数の引数としてフィールド名を指定することが出来る
という意味になります。

(例)
SELECT Sum([数量]*[定価]) AS 売上 FROM T_受注;

もう一つの「グループ化の一部」として利用する場合は、
グループ化のSQL文「GROUP BY」 に続けてそのフィールド名が指定されているならば「SELECT」の後に続けて記載が可能
というものです。

(例)
SELECT 受注ID, Sum(金額) AS 売上 FROM T_受注 GROUP BY 受注ID;
(ポイント)
SELECTとGROUP BYの両方の後ろに「受注ID」が記載されています。)

Accessには、Excelと似た使い方が出来るところが沢山あり、比較対照しながら覚えると早くマスター出来ます。
この知識は業務処理を行う際に、ExcelとAccessのどちらを使った方がよいかの判断に繋がり役立ちます。

ですがクエリの難易度が上がってきた場合には、SQLの知識もあると、ExcelとSQLの違いの切り分けが出来るようになり、SQLのルールに照らして
「これは出来る」
「これは出来ない」
などの判断が素早くできるようになり、作成効率が上がってくると思います。

SQLの学習には一般にOracleの資格が利用されることが多いと思います。
エンジニアを目指される場合にはお勧めですが、Accessの作業を効率化したいだけでしたら、時間がある時にクエリのSQLビューを少しずつ見ておき、ある程度頭に入ってきたら参考書などで体系的に学習するのもよいと思います。

posted by Three bit com at 10:00| Access(アクセス)