Accessのクエリ作成といえばデザインビューで視覚的にフィールドを並べる方法が一般的ですが、「デザインビューでは作れない複雑な集計クエリが必要」「複数のテーブルを縦に結合したい」「SQL構文をそのまま使いたい」という場面ではSQLビューが有効な選択肢になります。
特に、複数のSELECT文の結果を縦に連結するユニオンクエリ(UNION)はSQLビューでしか作成できません。MOS Access試験でも「SQLビューでユニオンクエリを作成する」問題が出題されており、操作手順を知らないと対処できない問題の一つです。本記事では、AccessのSQLビューの開き方から基本的なSQL構文、ユニオンクエリの実務活用例、MOS試験対策まで一気通貫で解説します。
「AccessでSQLを直接書いてみたい」「デザインビューだけでは限界を感じている」「MOS試験のユニオンクエリ問題を確実に得点したい」という方は、ぜひ最後までご覧ください。
SQLビューとデザインビューの違い:いつ使い分けるか
Accessのクエリには「デザインビュー」「SQLビュー」「データシートビュー」の3つの表示モードがあります。デザインビューはドラッグ&ドロップでフィールドを追加し、条件を格に入力する視覚的なインターフェースです。SQLビューは、デザインビューの設定内容がSQLに変換されて表示される画面であり、直接SQLを記述することもできます。
| 比較項目 | デザインビュー | SQLビュー |
|---|---|---|
| 操作方法 | 視覚的なドラッグ&ドロップ | SQL文を直接テキスト入力 |
| 学習コスト | 低い(SQL知識不要) | SQL構文の知識が必要 |
| 作成できるクエリの種類 | 選択・集計・クロス集計・アクションクエリ等 | デザインビューと同等+ユニオンクエリ・データ定義クエリ |
| ユニオンクエリ | 作成不可 | 作成可能 |
| データ定義クエリ(CREATE TABLE等) | 作成不可 | 作成可能 |
| 複雑な副問い合わせ | 一部のみ対応 | 完全対応 |
| デザインビューとの相互変換 | SQLビューと相互変換可能 | 複雑なSQL→デザインビューに変換できない場合あり |
基本的な選択クエリや集計クエリはデザインビューで作成できます。SQLビューを使うべきタイミングは主に3つです。①ユニオンクエリ(UNION)で複数クエリを縦結合したいとき、②データ定義クエリ(CREATE TABLE・ALTER TABLE)でコードからテーブルを操作したいとき、③デザインビューでは記述しきれない複雑なサブクエリや式を使いたいときです。
SQLビューの開き方と基本操作
SQLビューを開く方法は複数あります。目的に応じて使い分けてください。
新規クエリをSQLビューで開く手順
- Accessのナビゲーションウィンドウで「作成」タブをクリックする
- 「クエリ」グループの「クエリデザイン」をクリックする
- 「テーブルの表示」ダイアログが開くので「閉じる」をクリックしてテーブルを追加しない状態にする
- リボンの「デザイン」タブ→「クエリの種類」グループ→「SQL表示」をクリックする(または「表示」ボタンの▼から「SQLビュー」を選択する)
既存のクエリをSQLビューで開く場合は、ナビゲーションウィンドウでクエリを右クリック→「デザインビュー」で開いた後に、リボンの「表示」ボタン→「SQLビュー」に切り替えます。または、クエリを右クリックして「SQLビュー」を直接選択できる場合もあります(Accessのバージョンによって異なります)。
SQLビュー画面の構成と保存方法
SQLビューを開くと、画面にテキスト入力エリアが表示されます。この入力エリアに直接SQL文を記述します。SQL文は大文字・小文字を区別しないので、「SELECT」でも「select」でも動作します。ただし、可読性のためキーワードは大文字で統一する慣習があります。
クエリの実行は「デザイン」タブ→「実行」ボタン(赤い!マーク)または「データシートビュー」に切り替えることで行います。保存はCtrl+Sまたは「ファイル」→「保存」です。初めて保存するときはクエリ名の入力を求められます。
AccessのSQL基本構文:SELECT文の書き方
AccessのSQL(Jet SQL / ACE SQL)は標準SQLとほぼ同じ構文ですが、いくつかAccess固有の記法があります。基本構文から押さえましょう。
SELECT文の基本構造
最もシンプルなSELECT文の構造を示します。
SELECT フィールド名1, フィールド名2 FROM テーブル名 WHERE 条件式 ORDER BY フィールド名 ASC;
Accessではフィールド名やテーブル名に日本語・スペースを含む場合、角括弧([ ])で囲む必要があります。
SELECT [顧客名], [受注日], [金額] FROM [受注テーブル] WHERE [金額] >= 10000 ORDER BY [受注日] DESC;
「全フィールドを取得する」場合はアスタリスク(*)を使います。
SELECT * FROM [受注テーブル];
WHERE句の条件式パターン
WHERE句に使える主な演算子とパターンをまとめます。
| 演算子・キーワード | 意味 | 記述例 |
|---|---|---|
| =, <>, >, <, >=, <= | 比較演算子 | WHERE [金額] >= 10000 |
| AND / OR | 複数条件の組み合わせ | WHERE [部門] = “営業” AND [金額] > 5000 |
| BETWEEN … AND … | 範囲指定 | WHERE [受注日] BETWEEN #2026/01/01# AND #2026/03/31# |
| IN(…) | リストのいずれかに一致 | WHERE [都道府県] IN(“東京都”,”大阪府”,”愛知県”) |
| LIKE | パターン一致(*=任意文字列、?=任意1文字) | WHERE [商品名] LIKE “スマート*” |
| IS NULL / IS NOT NULL | NULL判定 | WHERE [備考] IS NULL |
| NOT | 条件の否定 | WHERE NOT [ステータス] = “完了” |
Access SQLでの日付リテラルは #2026/06/01# のようにシャープ記号(#)で囲む点に注意してください。文字列リテラルはダブルクォーテーション(”)またはシングルクォーテーション(’)のどちらでも使えます。
GROUP BY・HAVING句で集計クエリをSQLで書く
デザインビューの「集計」機能と同等の集計クエリをSQLで記述する例を示します。
SELECT [担当者名], COUNT(*) AS 受注件数, SUM([金額]) AS 合計金額 FROM [受注テーブル] WHERE [受注日] >= #2026/01/01# GROUP BY [担当者名] HAVING SUM([金額]) >= 100000 ORDER BY SUM([金額]) DESC;
主要な集計関数を確認しておきましょう。
| 集計関数 | 意味 | 使用例 |
|---|---|---|
| COUNT(*) | レコード件数 | COUNT(*) AS 件数 |
| COUNT([フィールド]) | Null以外のレコード件数 | COUNT([顧客ID]) AS 顧客数 |
| SUM([フィールド]) | 合計値 | SUM([金額]) AS 合計 |
| AVG([フィールド]) | 平均値 | AVG([金額]) AS 平均金額 |
| MAX([フィールド]) | 最大値 | MAX([受注日]) AS 最終受注日 |
| MIN([フィールド]) | 最小値 | MIN([単価]) AS 最安値 |
GROUP BY句にはSELECTで選んだ非集計フィールドをすべて列挙する必要があります。HAVING句はGROUP BY後の集計結果に対してフィルタを掛けるもので、個々のレコードを絞り込むWHEREとは使う場面が異なります。「WHERE→データ絞込→GROUP BY→集計→HAVING→集計結果絞込」の順で処理されます。
テーブル結合(JOIN)をSQLビューで記述する
デザインビューで結合線を引く操作は、SQLではJOIN句に対応します。Accessでの代表的な結合パターンを示します。
INNER JOINとLEFT JOINの構文と使い分け
/* 内部結合:両テーブルに一致するレコードのみ取得 */ SELECT [顧客テーブル].[顧客名], [受注テーブル].[受注日], [受注テーブル].[金額] FROM [顧客テーブル] INNER JOIN [受注テーブル] ON [顧客テーブル].[顧客ID] = [受注テーブル].[顧客ID]; /* 左外部結合:顧客テーブルの全レコード+一致する受注レコード */ SELECT [顧客テーブル].[顧客名], [受注テーブル].[受注日], [受注テーブル].[金額] FROM [顧客テーブル] LEFT JOIN [受注テーブル] ON [顧客テーブル].[顧客ID] = [受注テーブル].[顧客ID];
| 結合種類 | SQL構文 | 取得レコード | デザインビュー対応 |
|---|---|---|---|
| 内部結合 | INNER JOIN~ON | 両テーブルで一致するレコードのみ | 「両方のテーブルの一致する行のみ」 |
| 左外部結合 | LEFT JOIN~ON | 左テーブルの全行+右テーブルの一致行 | 「左テーブルの全レコードを含む」 |
| 右外部結合 | RIGHT JOIN~ON | 右テーブルの全行+左テーブルの一致行 | 「右テーブルの全レコードを含む」 |
3テーブル以上を結合する場合、Accessでは複数のJOINを括弧でネストして記述します。
SELECT [顧客テーブル].[顧客名], [受注テーブル].[受注日], [商品テーブル].[商品名] FROM ([顧客テーブル] INNER JOIN [受注テーブル] ON [顧客テーブル].[顧客ID] = [受注テーブル].[顧客ID]) INNER JOIN [商品テーブル] ON [受注テーブル].[商品ID] = [商品テーブル].[商品ID];
ユニオンクエリ(UNION):複数テーブルのデータを縦に統合する
ユニオンクエリはAccessで唯一「SQLビューでしか作成できない」クエリの種類です。2つ以上のSELECT文の結果を縦方向(行方向)に連結する機能で、「複数のテーブルに似たような構造のデータがあり、それをまとめて一覧したい」場面で非常に役立ちます。
ユニオンクエリの構文と3つの前提条件
SELECT [フィールドA], [フィールドB], [フィールドC] FROM [テーブル1] UNION SELECT [フィールドX], [フィールドY], [フィールドZ] FROM [テーブル2];
ユニオンクエリには3つの前提条件があります。
- SELECT句のフィールド数が同じであること:上下のSELECT文のフィールド数が一致していないとエラーになります
- 対応するフィールドのデータ型が互換性を持つこと:テキスト型同士、数値型同士など互換性のあるデータ型を対応させます
- 結果のフィールド名は最初のSELECT文のフィールド名が使われる:第2のSELECT文のフィールド名は表示に使われません
UNION と UNION ALL の違い
| 構文 | 重複行の扱い | 処理速度 | 使い分け |
|---|---|---|---|
| UNION | 重複行を自動で除去する | 重複チェックのぶん遅い | 重複を除いた一意のレコードが必要な場合 |
| UNION ALL | 重複行をそのまま全件含む | 速い | 全件を重複ありでまとめたい場合・パフォーマンス重視 |
ユニオンクエリの実務活用例
例1:年度別テーブルを1つのビューにまとめる
SELECT [受注日], [顧客名], [金額], "2024年度" AS 年度 FROM [受注テーブル2024] UNION ALL SELECT [受注日], [顧客名], [金額], "2025年度" AS 年度 FROM [受注テーブル2025] ORDER BY [受注日];
例2:社員と派遣スタッフの名簿を一元化する
SELECT [社員名], [部署], "正社員" AS 雇用区分 FROM [社員テーブル] UNION SELECT [スタッフ名], [配属部署], "派遣" FROM [派遣スタッフテーブル] ORDER BY [部署], [社員名];
例3:コンボボックスの選択肢を複数テーブルから作る
SELECT [商品コード], [商品名] FROM [国内商品テーブル] UNION SELECT [商品コード], [商品名] FROM [輸入商品テーブル] ORDER BY [商品名];
ユニオンクエリは「フォームのコンボボックスやリストボックスの行ソース」として指定することで、複数テーブルから選択肢を作る用途にも使えます。テーブル構造を変更せずにデータを統合できる点がメリットです。
サブクエリ(副問い合わせ)の基本活用
SELECT文の中に別のSELECT文を入れる「サブクエリ(副問い合わせ)」もSQLビューで記述できます。デザインビューでも部分的に対応しますが、複雑なサブクエリはSQLビュー直接記述が確実です。
/* 平均金額を超える受注のみ取得 */ SELECT [顧客名], [受注日], [金額] FROM [受注テーブル] WHERE [金額] > (SELECT AVG([金額]) FROM [受注テーブル]); /* 受注実績がある顧客の情報のみ取得 */ SELECT [顧客ID], [顧客名], [住所] FROM [顧客テーブル] WHERE [顧客ID] IN (SELECT DISTINCT [顧客ID] FROM [受注テーブル]);
サブクエリの注意点として、Accessではサブクエリをデザインビューで正しく表示できないケースがあります。SQLビューで記述したサブクエリをデザインビューに切り替えると「SQLビュー専用クエリ」として固定される場合があります。この場合デザインビューには戻れませんが、クエリ自体は正常に動作します。
MOS Access試験でのSQLビュー・ユニオンクエリ出題パターンと攻略法
MOS Access試験では、SQLビューとユニオンクエリに関する問題が「クエリの作成と変更」カテゴリから出題されます。具体的な出題パターンと対策をまとめます。
MOS試験でのSQLビュー・ユニオンクエリ出題範囲
- ユニオンクエリをSQLビューで作成する
- 既存クエリのSQLビューを確認・編集する
- UNION と UNION ALL の違いを理解して適切に使用する
- デザインビューとSQLビューを切り替える操作
試験頻出パターンと攻略ポイント
| 頻出問題パターン | 操作手順のポイント | 注意点 |
|---|---|---|
| 2つのテーブルを縦結合するユニオンクエリを作成する | 新規クエリ→テーブル追加ダイアログを「閉じる」→SQLビューに切替→UNION構文を入力→クエリを保存する | 「テーブルの表示」ダイアログは必ず「閉じる」。誤ってテーブルを追加しないよう注意する |
| 重複を含めてUNION ALLで結合するよう指示される | UNION を UNION ALL に変更する | 問題文を読んでUNIONとUNION ALLを区別する。既定のUNIONは重複除去される |
| ユニオンクエリに並べ替えを追加する | 最後のSELECT文の後にORDER BY句を追加する | 途中のSELECT文にORDER BYを書くとエラーになる。ORDER BYは最後に1か所だけ |
| 既存クエリをSQLビューに切り替えて内容を確認する | クエリを開いた状態でリボン「表示」→「SQLビュー」を選択する | SQLビューで直接編集してCtrl+Sで上書き保存できる |
ユニオンクエリを試験本番で素早く作る3ステップ
- クエリデザインを開き、テーブルを追加せずに閉じる:「テーブルの表示」ダイアログが出たら「閉じる」ボタンをクリックする
- SQLビューに切り替えて構文を入力する:「デザイン」タブ→「SQL表示」をクリック。入力エリアに
SELECT~UNION~SELECT~の形式でSQL文を記述する - 実行・確認後にクエリを保存する:「実行」ボタンまたはデータシートビューに切り替えて結果を確認し、問題の指示通りのクエリ名で保存する
試験でよく見落とされる点として、ORDER BY句はユニオンクエリ全体に対して最後のSELECT文の後に1つだけ書くことを覚えてください。最初のSELECT文にORDER BYを書いた場合はエラーになります。また、ユニオンクエリのORDER BYで使うフィールド名は、最初のSELECT文で使ったフィールド名(または列番号)を使います。
SQLビューの練習法:デザインビューとの往復で理解を深める
- デザインビューで単純な選択クエリを作り、SQLビューに切り替えて生成されたSQLを読む:デザインビューの操作がSQLのどの構文に対応するかを対応させながら覚える
- 集計クエリをデザインビューで作り、SQLビューのGROUP BY句を確認する:HAVING句がデザインビューの「抽出条件(集計行の下)」に対応することを確認する
- 2つのシンプルなテーブルを用意してユニオンクエリを手書きする:フィールド数一致のルールを体験する
- ORDER BYをユニオンクエリの最後に追加する練習をする:途中に書いたときのエラーも実際に体験して覚える
AccessのSQLビューでよくある問題と対処法
| 問題・エラー | 主な原因 | 対処法 |
|---|---|---|
| ユニオンクエリで「フィールド数が一致しない」エラーが出る | 上下のSELECT文のフィールド数が異なる | 両方のSELECT句のフィールド数を数えて合わせる。不足フィールドには “” や 0 などの定数を補う |
| 日本語フィールド名でエラーになる | スペース・特殊文字を含むフィールド名が未囲み | 日本語フィールド名・スペース含みフィールド名は必ず [ ] で囲む |
| 日付条件が期待通りに動かない | 日付リテラルのシャープ記号(#)を忘れている | WHERE [受注日] = #2026/06/01# のようにシャープ記号で囲む |
| SQLビューで書いたクエリがデザインビューで開けない | ユニオンクエリ・データ定義クエリはデザインビュー非対応 | これは正常動作。ユニオンクエリはSQLビュー専用なのでそのまま使う |
| ユニオンクエリのORDER BYが効かない | 最後のSELECT文より前にORDER BYを書いている | ORDER BYは全てのSELECT~UNIONの後に1か所だけ書く |
| 集計後の絞り込みにWHEREを使っているとエラーになる | 集計後の絞り込みにWHEREを使っている | 集計後の絞り込みはHAVING句を使う。GROUP BYの後に続けて記述する |
まとめ:SQLビューとユニオンクエリでAccessの活用範囲を広げる
本記事で解説したAccessのSQLビューとユニオンクエリのポイントをまとめます。
- SQLビューの使い所:ユニオンクエリ・データ定義クエリ・複雑なサブクエリなど、デザインビューでは作れないクエリを作成するときに使う
- SELECT文の基本:FROM句でテーブル指定、WHERE句で絞込、ORDER BYで並べ替え。日本語フィールド名は角括弧で囲み、日付リテラルはシャープ記号で囲む
- GROUP BY・HAVING:集計クエリはGROUP BYでグループ化し、集計後の絞り込みはHAVING句を使う。WHEREは集計前の絞り込みに使う
- JOIN(結合):INNER JOINは一致行のみ、LEFT JOINは左テーブルの全行を含む。3テーブル以上の結合は括弧でネストする
- ユニオンクエリの条件:上下のSELECT文のフィールド数が一致すること。結果フィールド名は最初のSELECT文に従う。UNION(重複除去)かUNION ALL(全件)かを選ぶ
- ORDER BYの位置:ユニオンクエリでは最後のSELECT文の後に1か所だけ書く
- MOS試験対策:ユニオンクエリは「テーブル追加なし→SQLビュー切替→UNION構文入力→保存」の3ステップを実機で繰り返し練習する。ORDER BYの位置とUNION/UNION ALLの違いを問題文から読み取る
SQLビューを使いこなすことで、デザインビューだけでは対応できない業務要件に答えられるようになります。特にユニオンクエリは「年度別テーブルのまとめ表示」「複数の同構造テーブルの一元化」という現実の業務ニーズに直結するスキルです。まずはシンプルな2テーブルのユニオンクエリを一度手書きしてみることから始めてください。
MOS Access試験を受験する方は、本記事のユニオンクエリ作成手順をAccess実機で2~3回繰り返し練習し、「テーブル追加なし→SQLビュー→UNION構文→保存」の流れを迷わずできるようにしてください。確実な得点源になります。
