初心者向け解説シリーズ

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

nanikatoaccess

以下では、「クエリ入門:SELECTクエリでデータ抽出・集計」をテーマに、Microsoft Accessのクエリ機能をはじめて使う方向けに解説します。クエリは、テーブルから必要な情報だけを抽出・集計・計算するための仕組みであり、Access開発において欠かせない要素です。初心者でも分かりやすいよう、画面操作とSQL文の両面から説明を進めます。


1. クエリとは?

クエリ(Query) はデータベースから特定の情報を取り出したり、変換・集計したりするための機能です。Accessでは、クエリ デザインビューを使い、ドラッグ&ドロップ操作だけでもSQLに近い操作が行えます。

  • SELECTクエリ: テーブルのデータを検索して結果を表示する(最も基本的なクエリ)。
  • アクションクエリ: データを追加・更新・削除するなどの処理を行う。

今回はSELECTクエリを中心に、データ抽出と集計の基礎を紹介します。


2. SELECTクエリを作成する方法

ないものはない!お買い物なら楽天市場

2.1 クエリ デザインビューの使い方

  1. 「作成」タブ → 「クエリ デザイン」 を選択。
  2. ダイアログで使用するテーブル(または既存のクエリ)を追加し、デザイン画面にテーブルが表示される。
  3. テーブルから必要なフィールドをダブルクリック、または下部のグリッドにドラッグして追加。
  4. 抽出条件並べ替え を設定して実行すると、結果が表示される。

画面上のグリッド欄

  • フィールド: 抽出したい列を選択(例:顧客名, 住所, 売上高 など)。
  • テーブル: そのフィールドが所属するテーブル名。
  • 並べ替え: 昇順/降順を指定可能。
  • 抽出条件: 「住所 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デザインビュー活用のコツ

  1. フィールドやテーブルを追加したら実行して結果を見る: いきなり複雑にせず、小さな変更ごとに動作確認するのがおすすめ。
  2. 抽出条件はグリッド下部の「抽出条件」欄に記入し、テキスト型なら "山田"、日付型なら #2023/01/01# のように指定。
  3. 集計行(Σボタン): クエリデザイン画面上の「集計」ボタンを押すと、フィールドに「グループ化」「合計」「平均」などを設定できる。
  4. デザインビューとSQLビューを行き来: デザインで編集した内容がSQLビューにも反映されるので、慣れてきたらSQL文も見てみると習得が早い。

7. クエリを活用する実践例

  1. 検索フォーム
    • テキストボックスやコンボボックスの値をクエリのパラメータとして渡し、ユーザーが入力したキーワードや日付範囲で抽出。
  2. レポートのデータソース
    • 集計クエリをレポートのレコードソースに指定し、月次売上レポートやランキングレポートを作成。
  3. パススルークエリ(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でのデータ抽出・集計のほとんどがカバー可能です。次はフォームレポートと組み合わせ、クエリの結果を活用した実践的なアプリケーションを作っていきましょう。

DMM
ABOUT ME
管理人
管理人
駆け出しブロガー
入社した会社では、Accessを活用した基幹システムが長年運用されていました。しかし、開発者の高齢化により保守が困難となり、システムの維持・更新が急務に。 ほぼAccessに触れたことのなかった私は、ゼロから学びながら基幹システムを再構築してみることに。ついにはAccessによるシステム開発エンジニアとしてのスキルを身につけるまでに成長。 元々の業務のノウハウとそれを効率化するためのツール(Access)によって業務効率化システムをいくつも開発してきました。 みなさんの”なにか(業務のノウハウ)”とAccessで業務効率化を実現するお役に立てれば幸いです。
googleアドセンス
記事URLをコピーしました