【初心者向け】クエリ入門:SELECTクエリでデータ抽出・集計

以下では、「クエリ入門:SELECTクエリでデータ抽出・集計」をテーマに、Microsoft Accessのクエリ機能をはじめて使う方向けに解説します。クエリは、テーブルから必要な情報だけを抽出・集計・計算するための仕組みであり、Access開発において欠かせない要素です。初心者でも分かりやすいよう、画面操作とSQL文の両面から説明を進めます。
1. クエリとは?
クエリ(Query) はデータベースから特定の情報を取り出したり、変換・集計したりするための機能です。Accessでは、クエリ デザインビューを使い、ドラッグ&ドロップ操作だけでもSQLに近い操作が行えます。
- SELECTクエリ: テーブルのデータを検索して結果を表示する(最も基本的なクエリ)。
- アクションクエリ: データを追加・更新・削除するなどの処理を行う。
今回はSELECTクエリを中心に、データ抽出と集計の基礎を紹介します。
2. SELECTクエリを作成する方法
2.1 クエリ デザインビューの使い方
- 「作成」タブ → 「クエリ デザイン」 を選択。
- ダイアログで使用するテーブル(または既存のクエリ)を追加し、デザイン画面にテーブルが表示される。
- テーブルから必要なフィールドをダブルクリック、または下部のグリッドにドラッグして追加。
- 抽出条件 や 並べ替え を設定して実行すると、結果が表示される。
画面上のグリッド欄
- フィールド: 抽出したい列を選択(例:顧客名, 住所, 売上高 など)。
- テーブル: そのフィールドが所属するテーブル名。
- 並べ替え: 昇順/降順を指定可能。
- 抽出条件: 「住所 LIKE ‘東京‘」のような式を記載すると、該当するレコードのみ表示。
2.2 SQLビューでの操作(簡単な例)
デザインビューと合わせて、SQL文そのものを触ると理解が深まります。たとえば「顧客テーブル」(tbl_顧客)から、住所が「東京都」のレコードだけ取り出すSQLは以下のようになります。
sqlコピーするSELECT 顧客ID, 顧客名, 住所
FROM tbl_顧客
WHERE 住所 LIKE "*東京*";
Accessの場合、LIKE "*東京*"
のアスタリスク*
は部分一致を表すワイルドカードです(SQL Serverなどでは%
を用いますが、Accessは*
や?
を使います)。
3. 条件付き検索と演算フィールド
3.1 WHERE句:いろいろな抽出条件
- 数値や日付: 例えば「数量 > 10」「売上日 >= #2023/01/01#」などで範囲指定。
- テキスト: 「姓 = ‘山田’」や部分一致検索(LIKE “山田“)。
- 論理演算子: AND, OR, BETWEEN, IN などを組み合わせ複雑な条件を作成。
例: 注文テーブルの抽出クエリ
SELECT 受注ID, 顧客ID, 注文日, 数量
FROM tbl_受注
WHERE 数量 > 5
AND 注文日 BETWEEN #2023/01/01# AND #2023/06/30#
ORDER BY 注文日 DESC;
- 「数量が5以上」「注文日が2023/01/01~06/30の範囲」という2つの条件をANDで組み合わせ。
ORDER BY 注文日 DESC;
で注文日の新しい順に並べ替え。
3.2 演算フィールドの作成
クエリのデザインビューで新しい列に式を入れ、計算を行うこともできます。
- 例: 「売上金額 = 単価 * 数量」 といった算出
- Accessでは「フィールド」の行に
売上金額: [単価]*[数量]
のような書式で記載すると、新しい列(売上金額)を計算表示。
SQL文での書き方例
SELECT 商品ID,
単価,
数量,
(単価 * 数量) AS 売上金額
FROM tbl_受注;
(単価 * 数量)
に AS 売上金額
を付けて新しい列名を定義。
4. 集計クエリでデータをまとめる
集計クエリ は、データをグループ単位で合計・平均・件数などを計算する機能です。Accessデザインビューで「集計」のトグルボタンを押すと、フィールドごとに合計, 平均, カウント, 最大, 最小などを設定できます。
4.1 GROUP BYのSQL例
テーブル「tbl_受注」から、商品IDごとの合計数量を集計するとしたら、SQL文は次のようになります。
SELECT 商品ID,
SUM(数量) AS 合計数量
FROM tbl_受注
GROUP BY 商品ID;
- GROUP BY 商品ID で「商品ID」単位に集計。
- SUM(数量) AS 合計数量 で、同じ商品IDに属するレコードの数量を合計して表示。
4.2 WHERE句とHAVING句の違い
- WHERE句: GROUP化する前の行に対して抽出条件を適用。
- HAVING句: GROUP化した後の集計結果に対して条件を適用。
例: 特定期間内に数量合計が100を超える商品だけ表示
SELECT 商品ID,
SUM(数量) AS 合計数量
FROM tbl_受注
WHERE 注文日 BETWEEN #2023/01/01# AND #2023/12/31#
GROUP BY 商品ID
HAVING SUM(数量) > 100
ORDER BY SUM(数量) DESC;
WHERE
で「注文日が2023年内」のレコードに限定。HAVING
で集計後に「合計数量が100超え」のグループを絞り込み。
5. 複数テーブルのデータをJOINする
実際のシステムでは、多くの場合複数のテーブルからデータを取りまとめます。たとえば顧客テーブルと受注テーブルをJOINし、顧客情報と受注情報をまとめて表示すると便利です。
5.1 INNER JOIN
INNER JOIN
は、両テーブルの結合キーが一致する行だけを取り出す方法。Accessのデザインビューでは、リレーションシップを張っているフィールド同士が「結合線」で結ばれ、自動的にJOINが組まれます。
SELECT 受注.受注ID,
顧客.顧客名,
受注.数量,
受注.注文日
FROM tbl_受注 AS 受注
INNER JOIN tbl_顧客 AS 顧客
ON 受注.顧客ID = 顧客.顧客ID
WHERE 受注.数量 > 5;
AS 受注
やAS 顧客
でテーブルに別名を付与し、記述を分かりやすく。- 同じ名前のフィールドがある場合などは
テーブル名.フィールド名
で指定する。
5.2 LEFT JOIN / RIGHT JOIN
- LEFT JOIN: 左のテーブルには必ずデータを表示し、右のテーブルに該当がない場合でも空欄として結果に含める結合。
- RIGHT JOIN: その逆(Accessではあまり使わないケースが多い)。
- Excel的にいうとVLOOKUPに似た発想で、片方にしかないデータも表示したい場合に使います。
6. Accessデザインビュー活用のコツ
- フィールドやテーブルを追加したら実行して結果を見る: いきなり複雑にせず、小さな変更ごとに動作確認するのがおすすめ。
- 抽出条件はグリッド下部の「抽出条件」欄に記入し、テキスト型なら
"山田"
、日付型なら#2023/01/01#
のように指定。 - 集計行(Σボタン): クエリデザイン画面上の「集計」ボタンを押すと、フィールドに「グループ化」「合計」「平均」などを設定できる。
- デザインビューとSQLビューを行き来: デザインで編集した内容がSQLビューにも反映されるので、慣れてきたらSQL文も見てみると習得が早い。
7. クエリを活用する実践例
- 検索フォーム
- テキストボックスやコンボボックスの値をクエリのパラメータとして渡し、ユーザーが入力したキーワードや日付範囲で抽出。
- レポートのデータソース
- 集計クエリをレポートのレコードソースに指定し、月次売上レポートやランキングレポートを作成。
- パススルークエリ(SQL Server連携)
- SQL Server側で複雑なJOINや集計を行うようにし、Accessは結果だけ受け取る方法でパフォーマンスを向上。
8. まとめ:SELECTクエリでデータを自在に操る
- 基本的なSELECTクエリ: テーブルから必要な列を取り出し、WHEREで抽出条件を設定、ORDER BYで並べ替え。
- 集計クエリ: GROUP BY や集計関数(SUM, COUNT, AVG など)を駆使し、データをまとめる。
- JOINでテーブルを関連付け: リレーショナルDBの強み。複数テーブルのデータを一度に扱える。
- デザインビューとSQLビューを行き来しながら慣れると、Access独自のクエリ操作と汎用的なSQL文の両方をマスターできる。
クエリはAccess開発の要であり、きちんと理解しておくことでフォームやレポート作成が驚くほど楽になります。まずは「単一テーブルからのSELECT」→「WHERE句で条件抽出」→「集計」→「JOINで複数テーブルを扱う」という流れを一通り試してみてください。
関連記事
このあたりを押さえれば、Accessでのデータ抽出・集計のほとんどがカバー可能です。次はフォームやレポートと組み合わせ、クエリの結果を活用した実践的なアプリケーションを作っていきましょう。