ExcelとAccessのスキルアップをサポートするサイトです

ExcelとAccessの学習室

Access追加クエリの使い方|INSERT INTO文・更新クエリとの違い・実行できない原因を解説

この記事で学習できること
  • Accessの追加クエリとは何か
  • 追加クエリの基本手順と使い方
  • INSERT INTO文の基本構文
  • 追加クエリ、更新クエリ、テーブル作成クエリの違い
  • 追加クエリが実行できないときの確認ポイント

Accessで別テーブルのデータをまとめて追加したいときに使うのが、追加クエリです。

追加クエリは、SQLでいうINSERT INTO文に相当する機能です。
CSVやExcelから取り込んだデータを本番テーブルへ追加したり、月次データを履歴テーブルへ保存したりするときによく使います。

本記事では、Access追加クエリの基本、画面操作での作成手順、SQLビューで確認できるINSERT INTO文、追加クエリが実行できないときの原因までまとめて解説します。

Accessの追加クエリとは

Accessの追加クエリとは、既存のテーブルに新しいレコードを追加するためのアクションクエリです。

通常の選択クエリは、条件に合うデータを表示するだけです。
一方、追加クエリは選択したデータを追加先テーブルへ書き込みます。つまり、実行するとテーブルの中身が変わるクエリです。

追加クエリは、Accessの既存テーブルに新しいデータを追加するときに使うクエリで、SQLのINSERT文に相当します。
データベースを扱うなら必ず知っておきたい基本機能のひとつです。

追加クエリでできること

追加クエリは、抽出したデータを別のテーブルに新しい行として追記する処理です。
Excelでいえば、抽出した行を別シートに値貼り付けするイメージです。
元テーブルはそのまま残り、追加先テーブルにだけ行が増えます。

  • CSVやExcel内の全データを本番テーブルに取り込む
  • 月次締めデータを履歴テーブルに追記保存する
  • 顧客マスタや商品マスタに新規データだけを一括追加する
  • 外部テーブルのデータをAccess内のテーブルに複製する
  • 元データを触らず、別テーブルに抽出して試算・検証する
  • 過去データを退避してテーブルを整理する

追加クエリは、取込、本番反映、履歴化、マスタ一括登録、外部連携、作業テーブル作成、アーカイブ化など、業務のさまざまな場面で使えます。

追加クエリ・更新クエリ・テーブル作成クエリの違い

追加クエリと混同しやすいのが、更新クエリとテーブル作成クエリです。違いは、既存テーブルに対して何をするかで判断します。

クエリ役割既存データへの影響主な用途
追加クエリ既存テーブルに新しい行を追加する既存行は変更せず、行が増える取込、履歴追加、一括登録
更新クエリ既存テーブルの値を書き換える既存行の値が変わる単価改定、分類変更、フラグ更新
テーブル作成クエリ抽出結果から新しいテーブルを作る新しいテーブルを作成するバックアップ、作業用テーブル作成

既存データを書き換えたい場合は、追加クエリではなくAccessの更新クエリの使い方を確認してください。

抽出結果を使って新しいテーブルそのものを作りたい場合は、Accessのテーブル作成クエリの使い方が近い処理です。

Accessの画面操作で追加クエリを作成する手順

手順1-まずは選択クエリで結果を確認する

ここに空テーブル「T99_部品単価一覧表」があります。
他のテーブルデータを使い、まとまったデータを一括追加していきます。

新しい空のクエリを作ります。
追加したいデータを作るときは、いきなり追加クエリにせず、まずは選択クエリのままで編集しましょう。

クエリ内に「T01発注先マスタ」「T01部品マスタ」「T01価格マスタ」を追加します。

追加先テーブルの構成に合わせて、追加したいフィールドを選択します。
必要に応じて抽出条件を設定したり、集計関数を使ったりすることもできます。

手順2-追加クエリに切り替える

追加したいデータを作り終わったら、選択クエリを追加クエリに切り替えます。
クエリデザインの「追加」をクリックします。

追加先のテーブルを選びます。

そのままOKをクリックします。

クエリのデザイングリッドに「レコードの追加」が表示され、追加先テーブルのフィールドを指定できるようになります。

「レコードの追加」に何も表示されない場合は、フィールド名や追加先テーブルの指定が間違っている可能性があります。
実行前によく確認しておきましょう。

手順3-クエリを実行して件数を確認する

追加クエリを実行して、空のテーブルにデータを追加します。
リボンメニューの実行ボタンをクリックします。

確認ダイアログが表示されます。
追加される件数を確認してから「はい」をクリックします。

追加先のテーブルを確認し、データが正しく追加されているか確認します。

追加クエリは他のクエリとアイコンが異なります。
オブジェクトブラウザから実行すると、実行した回数だけデータが追加されるため注意してください。

INSERT INTO文で追加する基本構文

追加クエリをSQLビューで確認すると、AccessがINSERT INTO文を自動生成していることが分かります。
SQLビューの基本は、AccessのSQLビューでクエリを編集する方法でも解説しています。

1件だけ追加する場合の基本構文は、次の形です。

INSERT INTO 追加先テーブル名 (フィールド1, フィールド2)
VALUES (値1, 値2);

例として、部品マスタに1件追加する場合は次のように書きます。

INSERT INTO T01部品マスタ (部品ID, 部品名, 小分類ID)
VALUES (1001, 'SUS アングル', 10);

複数レコードをまとめて追加する場合は、SELECT文で抽出した結果をINSERT INTOで追加します。

INSERT INTO T99_部品単価一覧表 (部品ID, 単価)
SELECT 部品ID, 単価
FROM T01価格マスタ;

このINSERT INTO SELECTの構文は、Accessで追加クエリを作成したときによく使われる形です。
複数のデータをまとめて追加したい場合に便利です。

同じ追加クエリを複数回実行すると、同じ内容が重複して追加されることがあります。
重複を避けたい場合は、追加済みのデータを除外する条件を入れます。

INSERT INTO T99_部品単価一覧表 (部品ID, 単価)
SELECT s.部品ID, s.単価
FROM T01価格マスタ AS s
WHERE NOT EXISTS (
  SELECT 1 FROM T99_部品単価一覧表 AS t
  WHERE t.部品ID = s.部品ID
);

1件だけ追加する場合はSQLを直接書く方法もある

Accessのクエリデザイン画面は、複数件の追加や別テーブルから抽出したデータの追加に便利です。
フィールドの対応関係を画面で確認しながら作れるため、まとめて追加する処理では使いやすい方法です。

一方で、1件だけ固定値を追加する場合は、デザイングリッドで組むと入力項目が増えて冗長になりやすいです。
追加する値が決まっているなら、SQLビューでINSERT INTO ... VALUES ...の形を直接書いたほうが、何をどのテーブルへ追加するのか分かりやすくなります。

追加クエリが実行できないときの確認ポイント

Accessの追加クエリが実行できない、または実行してもデータが追加されない場合は、次のポイントを順番に確認します。

フィールド数不一致

INSERT INTOで指定した追加先フィールド数と、SELECTやVALUESで渡す値の数が一致していないと追加できません。
追加先に3項目指定しているなら、追加する値も3項目必要です。

データ型不一致

数値型フィールドに文字列を入れたり、日付型フィールドに日付として解釈できない値を入れたりすると、データ型不一致や型変換エラーになります。
追加先フィールドのデータ型と、追加する値の型を合わせてください。

主キー重複

追加先テーブルの主キーに同じ値がすでに存在する場合、キー違反で追加できません。
オートナンバー型の主キーを手入力していないか、既存データと同じIDを追加しようとしていないか確認しましょう。

必須フィールド空欄

追加先テーブルで「値要求」がはいになっているフィールドにNullや空欄を入れると追加できません。
必須フィールドには必ず値を渡してください。

追加先フィールド名の間違い

デザイングリッドの「レコードの追加」に想定したフィールドが表示されない場合、追加先フィールド名の指定ミスや、追加先テーブルの選択ミスが考えられます。
フィールド名の全角、半角、スペースも確認してください。

参照整合性の違反

リレーションシップで参照整合性を設定している場合、子テーブルに登録する値は親テーブルに存在している必要があります。
親テーブルに存在しない小分類IDや顧客IDを追加しようとすると、追加クエリはエラーになります。

追加クエリを安全に使うための注意点

追加クエリは便利ですが、実行するとテーブルにレコードが追加されます。
元に戻すボタンで簡単に戻せる処理ではないため、本番テーブルでいきなり実行しないことが重要です。

実行前に選択クエリで確認する

追加クエリに切り替える前に、選択クエリとして実行し、追加予定のレコードが想定どおりか確認します。
件数、重複、Null、データ型を見てから追加クエリに切り替えましょう。

実行前にバックアップを取る

本番の操作を行う直前には、対象テーブルのバックアップを取ります。
ナビゲーションウィンドウで対象テーブルを右クリックし、コピー、貼り付け、バックアップ用の名前を付けるだけでも、実行前の状態を保存できます。

  1. ナビゲーションウィンドウで対象テーブルを右クリックする
  2. 「コピー」を選択する
  3. 右クリックして「貼り付け」を選択する
  4. テーブル名を「T01部品マスタ_backup」などに変更する

同じ追加クエリを複数回実行しない

追加クエリは、実行するたびにレコードを追加します。
条件を入れていない追加クエリを2回実行すると、同じデータが2回追加されることがあります。
実行前に追加先テーブルの件数と、追加予定件数を必ず確認してください。

まとめ

  • 追加クエリは、既存テーブルに新しいレコードを追加するクエリです。
  • 既存データを書き換える場合は、追加クエリではなく更新クエリを使います。
  • 抽出結果から新しいテーブルを作る場合は、テーブル作成クエリを使います。
  • 追加クエリは、SQLビューではINSERT INTO文として確認できます。
  • 実行前には、バックアップと追加対象データの確認が必要です。
  • フィールド数不一致、データ型不一致、主キー重複に注意しましょう。

不要なレコードを削除したい場合は、Accessの削除クエリの使い方もあわせて確認してください。

https://sys-daddy.com/delete_query_of_access/

FAQ

Accessの追加クエリと更新クエリの違いは何ですか?

追加クエリは既存テーブルに新しいレコードを追加するクエリです。
更新クエリは、既存レコードの値を書き換えるクエリです。

Accessの追加クエリとテーブル作成クエリの違いは何ですか?

追加クエリは既存テーブルに行を追加します。
テーブル作成クエリは、抽出結果から新しいテーブルを作成します。

追加クエリを実行してもデータが追加されないのはなぜですか?

抽出条件に一致するデータがない、追加先フィールドの指定が間違っている、主キー重複やデータ型不一致で一部のレコードが追加できない、参照整合性に違反している可能性があります。

INSERT INTO文でフィールド数が一致しないとどうなりますか?

追加先に指定したフィールド数と追加する値の数が一致しない場合、Accessは追加処理を実行できません。
フィールド数と並び順を確認してください。

追加クエリを実行する前に確認すべきことは何ですか?

選択クエリで追加予定データを確認し、件数、重複、データ型、Null、主キー、追加先フィールド名を確認します。
本番テーブルでは実行前にバックアップを取ります。