Accessでは、テーブルに格納されたデータを「クエリ」を使って自由に抽出したり、一括で更新したりすることができます。クエリは非常に便利で直感的に使える機能ですが、その正体は「SQL(Structured Query Language)」というデータ操作のための言語です。
こちらの記事でも、クエリとSQLの関係についての触れていますので、ぜひご覧ください。
クエリを使うだけでも多くのことができますが、SQLを習得することで、より柔軟で高度なデータ操作が可能になります。
本記事では、そのSQLの基本的な構文や考え方、そしてクエリとの比較について、わかりやすく解説していきます。
AccessにおけるSQL
SQLとは
SQL(エスキューエル)は、「Structured Query Language」の略で、一言で言えば、「データベースと会話するための言葉」です。
たとえば、「この条件に合うデータを教えて」「この情報を登録して」「このレコードを更新して」など、人が頭の中で考えている操作を、コンピュータに“正確に伝える”ための手段がSQLなのです。
SQLはリレーショナルデータベースの共通言語として、多くのデータベース管理システム(DBMS)で使用されており、Access、MySQL、SQL Server、PostgreSQLなど、どのシステムでも基本の文法はほとんど同じです。つまり一度覚えれば他の環境でも応用できるのが特徴です。
クエリの正体がSQLという意味は
前述したとおり、SQLはデータベースを操作する言語として広く活用されていますが、AccessではSQLの代わりに、通常は「クエリ」というオブジェクトが使用されます。
記事冒頭で「クエリの正体はSQL」といいましたが、クエリを使用しているということはSQLを使っていることでもあります。これは「クエリとSQLが表裏一体」であるからです。その証拠にSQLビューに切り替えると、クエリをSQLに変換した様子を確認できます。


Accessは専門性を持たない一般的なユーザを対象としていますので、直感的に操作できるクエリというオブジェクトが用意されているんですね
AccessでSQLを使う理由
前述したとおり、Accessでは「クエリとSQLは表裏一体」であり、実際に多く使用されるのは「クエリ」で、SQLを直接使う機会は少ないかもしれません。しかし実際には、SQLを使うほうが効果的な場面がいくつかあります。
ここではAccessにおける主なSQL活用場面として、主に以下の3つのケースを紹介します。
- VBA内でSQLを使うと処理内容が把握しやすくなる
- オブジェクト数の肥大化を防げる
- SQLクエリを使用する場合
VBA内でSQLを使うと処理内容が把握しやすくなる
Accessで作成した業務用ツールを改修する際に、VBAコードなどを解析し、動作内容を確認することがよくあります。他人が作成したツールはもちろん、自身が過去に作成したものであっても確認、検証は欠かせません。
VBA内にクエリを多用していると、構成しているフィールドや抽出条件等を把握するために、都度クエリを開く必要があり手間がかかります。
SQLを使うと、VBAコードを目視していくだけで、ある程度の処理内容を把握できることに加え、コード内をキーワード検索できるため、必要な改修箇所などを把握しやすくなります。


クエリの方がコード自体のスッキリ感はあるので一長一短はありますが、規模の大きい改修時の解析にはSQLが便利ですね!
オブジェクト数の肥大化を防げる
Accessでの作業を進めていると、様々なデータ抽出等が必要になり、気づいたらクエリの数が膨大になっていた…ということはAccessにおける”あるある”の一つかもしれません。
オブジェクトの数が増えていくと、名前の付け方に気を付けていたとしても、どれがどの用途が分かりにくくなり、当初の作成者がいなくなったとき、後任者が内容把握するのが大変になります。
こういった状況を避けるには、クエリとSQLをうまく使い分け、可能な範囲でオブジェクトの数を抑えることをお勧めします。具体的には、複雑な構文になるもの(複数のテーブル結合、グループ化、グループ化の条件抽出等)は「クエリ」、シンプルな構文は「SQL」といった使い分けも一つの方法です。

SQLクエリを使用する場合
クエリは基本的に「デザインビュー」という画面で作成しますが、「ユニオンクエリ」のように、デザインビューでは作成できないクエリがあります。
そういったクエリを「SQLクエリ」といいます。SQLクエリを作成するには、SQLビュー画面にSQLを直接記述するしかありませんので、SQLの構文をある程度把握している必要があります。
SQLクエリは使用する場面が限られているかもしれませんが、いざという時に使えるよう、その存在は知っておいてください。SQLクエリはこちらの記事でも触れていますので、参考にしてみてください。
SQLの種類
SQLは、実はひとつの大きな言語ではなく、目的ごとに複数の「サブ言語」に分類することができます。
その分類が以下の3つです。
- DML(データ操作言語)
- DDL(データ定義言語)
- TCL(トランザクション制御言語)
DML(データ操作言語)
DMLは「Data Manipulation Language」の略で、データベースの中に入っている実際のデータを「取り出す・追加する・変更する・削除する」ためのSQLです。Accessで最もよく使うのがこのDMLです。
主なSQL文として次の5つがあります。Accessの場合は各SQLに相当するクエリがありますので、併せてご紹介します。
| SQL文 | 役割 | 相当するクエリ |
|---|---|---|
| SELECT | データの抽出(検索) | 選択クエリ |
| INSERT | データの追加(登録) | 追加クエリ |
| UPDATE | データの更新(修正) | 更新クエリ |
| DELETE | データの削除 | 削除クエリ |
| UNION/UNION ALL | 複数のSELECT文を結合 | ユニオンクエリ |

ACCESSでは、まずこの表の上から4つまでを覚えれば、当面困らないと思います!
DDL(データ定義言語)
DDLは「Data Definition Language」の略で、データそのものではなく、データの入れ物であるテーブルを作ったり、テーブルの構造を変更したり、削除したりするためのSQLです。
| SQL文 | 役割 | 相当するクエリ |
|---|---|---|
| CREATE | テーブルやインデックスなどの作成 | テーブル作成クエリ |
| ALTER | 既存のテーブルを変更(フィールド追加等) | - |
| DROP | テーブルなどを削除 | - |

通常、テーブルの作成などは「デザインビュー」で行いますが、上記のSQLを使えば、VBAから自動的に作成することもできます。
TCL(トランザクション制御言語)
TCLは「Transaction Control Language」の略で、複数のデータ操作を「一括でまとめて処理」し、途中で問題があれば取り消すというような「処理のまとまり=トランザクション」を管理するSQLです。
この処理をイメージしてもらう際によく使われる例に、「銀行の口座振込」処理があげられます。
Aさん(口座残高5,000円)からBさん(口座残高10,000円)へ1,000円を送金する時のデータベースの動き
(1)Aさんの口座から1,000円差し引き、残高を4,000円にする
(2)Bさんの口座に1,000円加算し、残高を11,000円にする
この際、(1)の処理は正常に終了し、(2)で何らかの障害が発生した場合、Aさん口座から金額が差し引かれるだけで、Bさんの口座には届いていません。Aさんの1,000円はどこに行ったのでしょうか?これでは大混乱です。
こういった事態を避けるため、(1)と(2)を「一つのまとまった処理」と捉え、以下のどちらかの対応を行うことを「トランザクション」といいます。
・すべて正常に完了した場合にデータが反映(COMMIT)
・途中で失敗した場合は最初に処理を戻す(何も起こらない状態)(ROLLBACK)
| SQL文 | 役割 |
|---|---|
| BEGIN | トランザクションの開始を宣言する |
| COMMIT | 正常に処理が終わったら「確定」する |
| ROLLBACK | エラーが起きたら「すべて取り消す」 |

トランザクションはAccessでも必要に応じて実装することがあります。詳しい設定方法は別記事で解説予定です。
SQLの構文
SELECTの基本構文
ここまではSQLの全体像を説明してきましたが、ここからはSQLの具体的な構文を解説していきます。SQLの種類によって構文は異なりますが、今回は最も基本となる「SELECT」を例に進めていきます。
SELECT フィールド名1, フィールド名2, …
FROM テーブル名
WHERE 条件
ORDER BY 並べ替え対象 [ASC|DESC];
それぞれ、次の意味があります。
| SELECT文の構成要素 | 意味 |
|---|---|
| SELECT | 表示したい項目(列)を指定する |
| FROM | どのテーブル(クエリ)からデータを取るかを指定する |
| WHERE | 抽出の条件を指定する(省略可) |
| OEDER BY | 並べ替えの指定する(省略可) |

上記は最もシンプルな例です。実務ではもっと複雑なものが多いですが、基本を押さえていれば理解しやすいはずです。
具体例とクエリとの比較
SELECT文によるデータ抽出の具体例と、同じデータ抽出をクエリで行った場合の比較を見ていきましょう。
データ抽出条件
クエリ「SQ_社員情報閲覧」の中から「経理部」の社員のみ抽出し、「生年月日」の昇順で「名前」「所属名」「生年月日」を一覧表示する
SQLの場合
SELECT 社員名, 所属名,生年月日
FROM SQ_社員情報閲覧
WHERE 所属名=’経理部’
ORDER BY 生年月日;
クエリの場合

SELECT構文の基本から応用までは、こちらの記事でも詳細を解説しています。
まとめ
Accessでは、視覚的にも分かりやすく便利な「クエリ」がありますので、通常はクエリの使用で問題ありません。問題がないというよりは、積極的に活用すべきです。
一方、今回ご説明したように、ケースによってはVBAに直接SQL文を記載した方が効率的な面もありますので、ケースによって使い分けていくのが最適解と考えます。
そのためにも、SQLの基本を理解していきましょう。今回の記事にも記載しましたが、使い慣れたクエリとSQL構文を照らし合わせていくと理解しやすいのではないでしょうか。




