Accessのクエリとは|選択クエリの基礎と作り方入門
Accessのクエリはデータを保持せずテーブルから条件で取り出す仕組み。選択クエリの作り方(デザインビュー6ステップ)、抽出条件・並べ替え・グループ化・結合の基礎、アクションクエリの注意点を初心者向けに解説します。
結論:クエリはテーブルのデータを「その場で取り出す」ビューだ
Accessのクエリは、テーブルに保存されているデータを条件で絞り込み、必要なフィールドだけを取り出す仕組みです。重要なのは、クエリ自体はデータを保持しない点です。クエリを開くたびにテーブルを読み直すので、テーブル側のデータが更新されていれば結果も変わります。SQLを直接書かなくてもマウスとキーボードで操作できるデザインビューがあるため、プログラミング未経験でも使い始められます。
ただし、クエリには選択クエリ以外に「アクションクエリ」と呼ばれる種類があり、実行するとテーブルのデータを書き換えたり削除したりします。Accessはアクションクエリを実行する前に確認ダイアログを表示しますが、元に戻す操作(Ctrl+Z)では取り消せません(Run a query | Microsoft Support)。慣れるまでは選択クエリから使い始めるのが安全です。
クエリの種類一覧
Accessの主なクエリ種類を整理します(Introduction to queries | Microsoft Support)。パラメータ(実行時に入力値を求める機能)はそれ自体が独立した種類というより、選択クエリや集計クエリなど他のクエリに追加できる仕組みです。
| 種類 | 何をするか | 主な用途 |
|---|---|---|
| 選択クエリ | テーブルからデータを取り出して表示する | 一覧表示・帳票のデータソース |
| 集計クエリ(集計行) | グループ化してSum・Count・Avgなどを計算する | 月別売上合計・カテゴリ別件数など |
| クロス集計クエリ | 行と列の2軸でデータを集計する | 月×担当者の売上マトリクスなど |
| アクションクエリ | テーブルのデータを追加・更新・削除・新規テーブル作成する | 一括更新、期末に不要データを削除するなど |
| SQL固有クエリ(ユニオン・パススルーなど) | SQLビューでのみ作成できる特殊なクエリ | 2テーブルの縦結合、外部DBへの直接クエリ |
ユニオンクエリやパススルークエリはデザインビューでは編集できず、作成・編集はSQLビューで行います。実行結果はデータシートビューで確認できます。
選択クエリの作り方(デザインビュー)
デザインビューはSQLを書かずに選択クエリを作れる画面です。リボンの「作成」タブ→「クエリデザイン」で開き、6つのステップで完成します(Create a simple select query | Microsoft Support)。
- 「テーブルの表示」ダイアログで使うテーブル(またはクエリ)を追加する
- 上段のフィールド一覧から、下段のデザイングリッドの「フィールド」行へドラッグする
- 不要なフィールドは「表示」チェックを外す(抽出条件には使うが結果には出したくない列に使う)
- 「抽出条件」行に絞り込みの式を入力する
- 「並べ替え」行で昇順または降順を選ぶ
- リボンの「実行」ボタン(または「!」)をクリックするとデータシートビューに結果が出る
1つのクエリに追加できるテーブルまたはクエリは最大32、クエリの結果セット全体で使えるフィールドは最大255です。
抽出条件と並べ替えの基本
抽出条件はデザイングリッドの「抽出条件」行に式を書きます(Examples of query criteria | Microsoft Support)。同じ行に複数の条件を書くとAND(かつ)、別の行に書くとOR(または)になります。よく使う書き方を挙げると、
| やりたいこと | 条件の書き方 |
|---|---|
| 「東京」と完全一致 | = "東京" または "東京" |
| 「東京」で始まる | Like "東京*" |
| 100以上200以下の数値 | Between 100 And 200 |
| NULL(空)のレコード | Is Null |
| 特定の値3つのいずれか | In(10, 20, 30) |
| 今日の日付 | Date() |
日付を直接入力するときは #2025/04/01# のように # で囲みます。並べ替えは「並べ替え」行のドロップダウンで「昇順」または「降順」を選ぶだけです。複数フィールドに並べ替えを設定した場合、デザイングリッドの左にある列が優先されます。
パラメータクエリと集計クエリ
パラメータクエリ
パラメータクエリは、実行するたびに条件の値を入力させます。抽出条件行に [担当者名を入力してください] のように角括弧で囲んだ文字列を書くと、クエリを実行したときにその文字列がダイアログのメッセージとして表示され、入力した値で絞り込まれます。ワイルドカードと組み合わせることも可能で、Like [検索する名前] & "*" のように書けば前方一致の動的検索になります。
集計クエリ(グループ化)
デザインビューで「集計」ボタン(Σ)を押すと、デザイングリッドに「集計」行が追加されます。各フィールドの集計行には「グループ化」か「Sum・Count・Avg・Min・Max」などの関数を選びます。グループ化したいフィールドには「グループ化」を、合計や件数を出したいフィールドには対応する集計関数を選ぶ、というのが基本パターンです。
集計クエリで使える関数の種類はフィールドのデータ型によって変わります。テキスト型では Sum は使えず、Count や First、Last が使えます。
複数テーブルの結合(JOIN)
受注テーブルと顧客テーブルのように、リレーションシップで結んだテーブルを一緒にクエリへ追加すると、Accessは自動で結合線(内部結合)を引きます(Create a simple select query | Microsoft Support)。内部結合は両方のテーブルに一致するレコードだけを返します。
結合線をダブルクリックすると「結合プロパティ」が開き、3種類の結合タイプを選べます(Join tables and queries | Microsoft Support)。
| 選択肢 | 動作 |
|---|---|
| 1(内部結合・既定) | 両方のテーブルで一致する行だけ返す |
| 2(左外部結合) | 左テーブルの全行+右テーブルの一致行 |
| 3(右外部結合) | 右テーブルの全行+左テーブルの一致行 |
「顧客がいない受注」や「受注がない顧客」を探したいときは外部結合を使います。多対多の関係がある場合(例:商品と受注の間に受注明細テーブルがある)は、3つのテーブルすべてをクエリに追加する必要があります。テーブルの正規化とリレーションシップの設計についてはテーブル設計と正規化の基礎で詳しく解説しています。
SQLビューとアクションクエリの注意点
SQLビューとデザインビューの関係
デザインビューで設定した内容はAccessが内部でSQL文に変換しています。「ホーム」タブ→「表示」→「SQLビュー」(またはビュー切り替えボタン)でそのSQL文を確認できます。逆に、SQLビューで書いたSQL文がデザインビューで表現できる内容であれば、デザインビューに切り替えて確認できます。ユニオンクエリ・パススルークエリ・データ定義クエリはデザインビューで表現できないため、SQLビューのままで扱います。
クエリのパフォーマンスを改善したい場合は、インデックスの活用や集計関数の使い方の見直しが効きます。詳細はAccessクエリ高速化の技術にまとめています。
アクションクエリは実行前にバックアップを
アクションクエリ(更新・追加・削除・テーブル作成)はデータベースのデータを実際に書き換えます。デフォルトでは実行時に確認メッセージが出ますが、一度OKを押すと「Ctrl+Z」で元に戻せません(Run a query | Microsoft Support)。実行前に選択クエリとして対象データを確認してから切り替える、またはバックアップを取った上で実行するのが安全です。
なお、Accessはデータベースが信頼できる場所にない場合、アクションクエリをデフォルトで無効にします。リボン下部のメッセージバーで「コンテンツの有効化」をクリックするか、信頼できる場所に.accdbファイルを移動することで有効になります。
現在お使いのAccessのテーブル・クエリ構造に課題があるかどうかを確認したい場合は、無料の解析可否チェックから現状をお送りください。
よくある質問
Q. クエリを保存すると、そのときのデータも保存されますか。
保存されません。Accessのクエリはクエリの定義(どのテーブルからどのフィールドを、どの条件で取り出すか)を保存するものです。データは保存しないため、クエリを開くたびにテーブルを読み直して最新の結果を返します。データを一時的に固定したい場合はテーブル作成クエリを使います。
Q. 選択クエリで表示したデータは直接編集できますか。
一部の選択クエリでは、データシートビューに表示されたデータをそのまま編集してテーブルに反映できます。ただし、集計関数を使ったクエリや、DISTINCT(重複排除)を含むクエリ、複数テーブルの結合で主キーが一意に特定できない場合は編集できません(Edit data in a query | Microsoft Support)。
Q. パラメータクエリで何も入力せずOKを押すとどうなりますか。
未入力は空文字列("")として扱われます。Like [検索する名前] & "*" のような条件では、空文字列と連結するとパターンが Like "*" になり、Nullでない文字列全体に一致してほぼ全件表示される動作になります。一方、= [担当者名を入力] のような等値条件では空文字列と完全一致するレコードを探すため、通常は0件になります。入力の有無でどちらの動作にするかは条件式の書き方しだいなので、初めて作るときは実際に試して確認するのが確実です。
Q. クエリをフォームやレポートのデータソースにできますか。
できます。フォームのプロパティシートで「レコードソース」にクエリ名を設定するか、レコードソース欄のビルドボタンからクエリビルダーを開いてSQL文を指定すると、フォームがそのクエリ結果をもとにデータを表示します。条件付きでレコードを絞り込んで表示したいフォームや、複数テーブルから情報を集めたレポートを作るときは、クエリをデータソースにするのが標準的な設計です(Use a query as the record source for a form or report | Microsoft Support)。フォームとレポートの基本についてはフォームとレポートとはも参照してください。
触れないAccessが「診断できるか」だけ、確かめませんか。
顧客データは送信不要。発注の義務もありません。
約2分・ファイル送信不要・発注義務なし/説明はオンライン・売り込みはしません