Accessのクエリとは?種類・作り方・抽出条件の基本をまとめて解説

データベース・SQL

Accessのクエリは種類が多く、それぞれ役割が異なります。
選択クエリ・更新クエリ・追加クエリ・削除クエリ……と名前を並べられても、どれをどう使えばいいのかわかりにくいのが正直なところです。

この記事では、クエリの基本的な仕組みから、全11種類の使い分け、選択クエリの作成手順と抽出条件の書き方、アクションクエリの注意点までをまとめて解説します。

※画面や操作手順はMicrosoft 365(Access)/ Access 2021をもとに記載しています。バージョンによってリボンのボタン配置や表記が異なる場合があります。


スポンサーリンク

Accessのクエリとは

クエリとは、テーブルに対して「こういう条件でデータを取り出してほしい」「この値を書き換えてほしい」といった命令を出す機能です。

英語の「query」がそのまま名前になっており、日本語に訳すと「問い合わせ」。
テーブルに格納されたデータに対して質問を投げかけ、条件に合った結果を返してもらうイメージが近いでしょう。

Excelでいえば、フィルタ機能やVLOOKUP関数を組み合わせたような役割です。
ただし、Excelのフィルタとは決定的に異なる点が1つあります。

Excelのフィルタは元データの表示を切り替えているだけで、操作ミスによって元データを壊してしまうリスクがあります。
一方、Accessの選択クエリは元のテーブルには手を加えず、条件に合ったデータの「結果セット」を別途表示する仕組みです。

元データとクエリ結果が分離されているため、条件を変えても元テーブルが崩れることはありません。
この構造こそが、Accessをデータベースソフトたらしめている根幹部分でしょう。

クエリの裏側ではSQL(Structured Query Language)というデータベース言語が動いています。
Accessにはデザインビューというグラフィカルな画面が用意されており、SQLを直接書かなくても大半の操作をこなせるようになっています。
ただし、ユニオンクエリなど一部の操作ではSQLビューでの記述が必要です。


クエリの種類一覧と使い分け

Accessのクエリは、大きく「選択系」と「アクション系」の2つに分類できます。

選択系はデータを取り出す・集計することが目的で、元テーブルのデータは変更しません。
アクション系はデータの更新・追加・削除・テーブル作成など、元データに直接変更を加える操作です。

以下に全種類を一覧で整理します。

選択系クエリ

クエリ種別用途使いどころ
選択クエリ条件に合うデータを抽出する最も基本的なクエリ。日常的なデータ検索・一覧表示に使う
クロス集計クエリ行×列の形で集計する月別×商品別の売上集計など、ピボットテーブル的な分析をしたいとき
パラメータクエリ実行時に条件を入力させる「何月のデータを見たいですか?」のようにユーザーに都度条件を指定させたいとき
ユニオンクエリ複数のテーブルやクエリの結果を縦に結合する構造が同じ複数テーブル(支店別の売上表など)を1つにまとめたいとき
不一致クエリ片方のテーブルにしか存在しないデータを抽出する「注文テーブルにあるのに発送テーブルにない=未発送の注文」を見つけたいとき
重複クエリ同じ値を持つレコードを検出する名前や電話番号の重複データを洗い出したいとき
サブクエリクエリの中に別のクエリを入れ子にする「平均単価より高い商品だけ抽出」のように、集計結果を条件に使いたいとき

アクション系クエリ

クエリ種別用途使いどころ
更新クエリ既存データを一括で書き換える税率変更に伴う価格の一斉更新など
追加クエリ別テーブルへデータをコピーして追加する月次データを年間テーブルに追記するとき
削除クエリ条件に合うレコードを一括で削除する3年以上前のログデータをまとめて消したいとき
テーブル作成クエリクエリの結果から新しいテーブルを生成するバックアップ用テーブルの作成や、分析用に加工済みデータを別テーブルに切り出したいとき

どのクエリを使えばいいか迷ったときは、まず「元データを変更するかどうか」を判断基準にしてください。
変更しないなら選択系、変更するならアクション系。
選択系の中では、単純な抽出なら選択クエリ、集計ならクロス集計、複数テーブルの結合ならユニオン、というように目的で絞り込めます。


選択クエリの作り方と抽出条件の基本

選択クエリはAccessで最も使用頻度が高く、他のクエリの土台にもなる存在です。
ここではデザインビューを使った作成手順と、抽出条件の具体的な書き方を見ていきます。

デザインビューでの作成手順

  1. リボンの「作成」タブから「クエリデザイン」をクリックする
  2. 「テーブルの表示」ダイアログで使用するテーブルを選択して追加する
  3. テーブルのフィールド一覧から、クエリ結果に表示したいフィールドをデザイングリッド(画面下部の表)にドラッグする
  4. 「抽出条件」行に条件を入力する
  5. リボンの「実行」ボタン(赤い感嘆符アイコン)をクリックして結果を確認する

デザインビューではフィールドの並べ替え(昇順・降順)や表示/非表示の切り替えもグリッド上で設定できます。

抽出条件の書き方

抽出条件は、デザイングリッドの「抽出条件」行にそのまま入力する形式です。
データ型によって記法が異なるため、以下にパターンを整理しました。

テキスト型の条件

テキスト値はダブルクォーテーションで囲みます。

やりたいこと抽出条件の書き方意味
完全一致"東京"「東京」と完全に一致するレコード
前方一致Like "東京*"「東京」で始まるレコード
後方一致Like "*支店"「支店」で終わるレコード
部分一致Like "*営業*"「営業」を含むレコード

ワイルドカードにはアスタリスク(*)を使ってください。
SQLではパーセント(%)が一般的ですが、Accessのデザインビューでは*と入力すればAccessが自動的に処理してくれます。

数値型の条件

数値はそのまま入力するだけです。

やりたいこと抽出条件の書き方
等しい1000
以上>=1000
以下<=5000
範囲指定Between 1000 And 5000
~以外Not 0 または <>0

Null(空欄)の条件

Accessではデータが入力されていないフィールドは「Null」という特殊な状態になっています。
Nullは空文字列("")やゼロ(0)とは別物で、「値そのものが存在しない」という意味です。

やりたいこと抽出条件の書き方
空欄のレコードIs Null
空欄でないレコードIs Not Null

=""=0ではNullを正しく検出できないため、必ずIs Nullを使ってください。
たとえば「電話番号が未入力の顧客を抽出したい」なら、電話番号フィールドの抽出条件にIs Nullと入力します。

日付型の条件

日付はシャープ記号(#)で囲みます。

やりたいこと抽出条件の書き方
特定の日付#2025/04/01#
以降>=#2025/04/01#
期間指定Between #2025/04/01# And #2025/06/30#
今日の日付Date()
今月のデータYear([受注日])=Year(Date()) And Month([受注日])=Month(Date())

今月のデータを取り出す条件はやや複雑です。
毎回異なる月のデータを見たい場合は、パラメータクエリ(後述)で月を都度入力させる方法のほうがシンプルな場合もあります。

日付の書式は環境によってyyyy/mm/ddmm/dd/yyyyが混在するため、意図どおりに動作しているか実行結果で必ず確認してください。

複数条件の組み合わせ(AND / OR)

複数の条件を組み合わせたい場合、AND条件とOR条件で入力する行が異なる点に注意してください。

AND条件(すべて満たす): 同じ「抽出条件」行に複数の条件を並べて入力します。
例えば「都道府県」フィールドに"東京"、「売上」フィールドに>=10000を同じ行に入力すれば、東京かつ売上1万以上のレコードだけを絞り込めます。

OR条件(いずれかを満たす): デザイングリッドの「または」行(抽出条件の下の行)に別の条件を入力してください。
「抽出条件」行に"東京"、「または」行に"大阪"と入力すると、東京または大阪のレコードが結果に含まれます。


アクションクエリの使い方と注意点

アクションクエリは実行すると元テーブルのデータが直接変更されます。
選択クエリと違い、実行後に「元に戻す」(Ctrl+Z)はできません。

そのため、アクションクエリを実行する前には必ず以下の手順を踏むことを推奨します。

  • 対象テーブルのバックアップを取る(テーブルを右クリック→コピー→貼り付け)
  • まず選択クエリとして実行し、対象レコードが意図どおりか確認する
  • 問題なければクエリの種類をアクションクエリに変更して実行する

更新クエリ

既存レコードの値を一括で書き換えます。

作成手順は選択クエリとほぼ同じで、デザインビューでリボンの「更新」ボタンをクリックしてクエリの種類を切り替えるだけです。
するとデザイングリッドに「レコードの更新」行が現れるので、そこに新しい値や計算式を入力してください。

例:全商品の単価を10%値上げする場合、「単価」フィールドの「レコードの更新」行に[単価]*1.1と入力して実行します。

追加クエリ

あるテーブルのデータを別のテーブルにコピーして追加する機能です。

デザインビューで「追加」ボタンをクリックすると、追加先テーブルの指定ダイアログが開きます。
追加元と追加先のフィールド名が同じなら自動的にマッピングされますが、異なる場合は手動で対応を設定してください。

削除クエリ

条件に合うレコードをテーブルから一括で削除します。

4種類のアクションクエリの中で最もリスクが高い操作です。
削除条件を間違えると、必要なデータまで消えてしまいます。
必ず事前に選択クエリで対象レコードを確認してから実行してください。

テーブル作成クエリ

クエリの結果をもとに、新しいテーブルを自動生成します。

バックアップの作成、分析用テーブルの切り出し、古いデータのアーカイブなどが主な用途です。
既に同名のテーブルが存在する場合、実行時に「既存のテーブルを削除してから実行しますか?」という確認ダイアログが表示されます。
OKを押すと既存テーブルは完全に上書きされ、元のデータは復旧できません。
テーブル名の指定は慎重に行ってください。


知っておくと便利なクエリ

基本の選択クエリとアクションクエリ以外にも、特定の場面で威力を発揮するクエリがいくつかあります。

ユニオンクエリ

複数のテーブルやクエリの結果を「縦方向」に結合します。

たとえば「東京支店売上」「大阪支店売上」「名古屋支店売上」という3つのテーブルがあり、構造(フィールド名と型)が同じなら、ユニオンクエリで1つにまとめることが可能です。

ユニオンクエリはデザインビューでは作成できないため、SQLビューで直接記述してください。

SELECT 商品名, 数量, 売上 FROM 東京支店売上
UNION ALL
SELECT 商品名, 数量, 売上 FROM 大阪支店売上
UNION ALL
SELECT 商品名, 数量, 売上 FROM 名古屋支店売上;

UNION ALLはすべての行をそのまま結合する指定です。
重複行を除外したい場合はUNION(ALLなし)を使ってください。

パラメータクエリ

実行するたびにユーザーに条件を入力させるクエリです。

抽出条件欄に角括弧で囲んだ文字列を入力すると、実行時にその文字列がダイアログのメッセージとして表示される仕組みです。

例:抽出条件に[対象月を入力してください(例:2025/04)]と記述すると、クエリ実行時に入力ダイアログが開きます。
ユーザーが値を入力すると、その値が抽出条件として適用されます。

定型的なレポート出力で毎回条件を変えたい場合に便利です。

クロス集計クエリ

行見出し・列見出し・集計値の3要素を指定して、クロス表(ピボットテーブル的な集計表)を作成します。

「作成」タブの「クエリウィザード」から「クロス集計クエリウィザード」を選択すると、対話形式で設定できます。

不一致クエリ

2つのテーブルを比較して、片方にしか存在しないレコードを見つけ出すクエリです。

「注文テーブルにあるのに入金テーブルにない注文=未入金の注文」を見つけるような場面で有用です。
こちらも「クエリウィザード」から「不一致クエリウィザード」を選んで作成できます。

サブクエリ

クエリの中に別のクエリを埋め込む手法で、「入れ子クエリ」とも呼ばれるものです。

たとえば「全商品の平均単価より高い商品だけを一覧にしたい」という場合、平均値を先に求めるクエリを内側に書き、その結果を外側の抽出条件として使います。

SELECT 商品名, 単価
FROM 商品テーブル
WHERE 単価 > (SELECT Avg(単価) FROM 商品テーブル);

デザインビューでは抽出条件欄にSQL文を直接記述することで実現できます。


クエリとSQLの関係

Accessのクエリは、すべて裏側でSQLが動いています。

デザインビューで視覚的に組んだクエリも、内部的にはSQL文に変換されてから実行される仕組みです。
デザインビューの右下にある「SQLビュー」に切り替えれば、生成されたSQL文の確認・編集が可能になります。

主要なクエリとSQL構文の対応関係は以下のとおりです。

クエリの種類対応するSQL構文
選択クエリSELECT ... FROM ... WHERE ...
更新クエリUPDATE ... SET ... WHERE ...
追加クエリINSERT INTO ... SELECT ... FROM ...
削除クエリDELETE FROM ... WHERE ...
テーブル作成クエリSELECT ... INTO 新テーブル名 FROM ...
ユニオンクエリSELECT ... UNION ALL SELECT ...
クロス集計クエリTRANSFORM ... SELECT ... PIVOT ...

デザインビューだけでは作れない操作(ユニオンクエリ、複雑なサブクエリなど)はSQLビューでの記述が必須です。

逆に、SQLを学んでいる人にとっては、デザインビューで組んだクエリのSQLを確認するのがSQL学習の近道にもなるでしょう。
デザインビューで条件を設定した後にSQLビューに切り替えれば、自分が指定した条件がSQL文としてどう表現されるかを確認できるためです。

なお、AccessのSQLは標準SQLとは一部仕様が異なる点に注意してください。
ワイルドカードが%ではなく*である点、日付リテラルを#で囲む点、TRANSFORM...PIVOT構文がAccess固有である点などが代表的な相違点です。


クエリでよくあるエラーと対処法

クエリの作成や実行で遭遇しやすいエラーと、その原因・対処法を整理します。

「データ型が一致しません」エラー

抽出条件のデータ型とフィールドのデータ型が合っていないときに発生するエラーです。

たとえば、テキスト型のフィールドに1000(数値)を条件として入力すると発生することがあります。
テキスト型なら"1000"とダブルクォーテーションで囲み、日付型なら#2025/04/01#とシャープ記号で囲むのがルールです。

対処の基本は、対象フィールドのデータ型をテーブルのデザインビューで確認し、条件の記法を合わせることです。

レコード数が異常に多くなる(クロス結合)

複数のテーブルをクエリに追加したとき、テーブル同士のリレーションシップ(結合)が設定されていないと「クロス結合」が発生します。

クロス結合とは、テーブルAの全レコードとテーブルBの全レコードのすべての組み合わせが結果に出てしまう現象です。
テーブルAが100件、テーブルBが50件なら、結果は100×50=5,000件に膨れ上がります。

対処法は2つ。
1つ目は、事前にリレーションシップを設定しておくこと。
2つ目は、デザインビューでテーブル間のフィールドをドラッグして結合線を手動で引くことです。

「更新可能なクエリであることが必要です」エラー

クエリの結果をデータシートビューで直接編集しようとしたときに出るエラーです。

集計関数(Sum、Avgなど)を使ったクエリ、DISTINCT(重複除外)を指定したクエリ、ユニオンクエリなどは読み取り専用となり、直接編集できません。
データを変更したい場合は、更新クエリを別途作成するか、元のテーブルを直接編集してください。

日付条件が意図どおりに動かない

日付型の抽出条件で最もありがちなのが、シャープ記号(#)の付け忘れです。

2025/04/01とだけ入力すると、Accessはこれを日付ではなく「2025÷04÷01」という算術式として解釈してしまいます。
日付条件には必ず#2025/04/01#のようにシャープ記号を付けてください。

また、Windowsの地域設定によって日付の解釈順序(年/月/日 or 月/日/年)が変わるため、条件入力後は実行結果で正しいレコードが抽出されているか必ず確認してください。


まとめ

Accessのクエリは、テーブルのデータを操作するための命令機能です。

種類は大きく選択系とアクション系に分かれており、選択クエリでのデータ抽出、更新クエリでの一括変更、追加クエリでのデータ移行、削除クエリでのレコード除去など、用途に応じた使い分けが基本です。

選択クエリで抽出条件の書き方を覚えれば、日常的なデータ検索の大半をカバーできます。
テキスト型はダブルクォーテーション、日付型はシャープ記号で囲み、ワイルドカードにはアスタリスクを使う——この3点が基本です。

アクションクエリは元データを直接変更するため、実行前のバックアップと事前確認が欠かせません。

ユニオンクエリやサブクエリなどデザインビューだけでは対応できない操作もありますが、SQLビューを併用することでAccessの対応範囲は大きく広がります。

クエリ実行時にエラーが出た場合は、抽出条件のデータ型(テキストのクォーテーション、日付のシャープ記号)を最初に確認するのが定石です。
レコード数が異常に多いときはテーブル間の結合設定を疑ってください。

参考情報源

コメント

タイトルとURLをコピーしました