AccessのSQLビューとユニオンクエリを使いこなす|手書きSQL・複数テーブル統合・集計クエリの実践手順とMOS試験対策

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ビューで開く手順

  1. Accessのナビゲーションウィンドウで「作成」タブをクリックする
  2. 「クエリ」グループの「クエリデザイン」をクリックする
  3. 「テーブルの表示」ダイアログが開くので「閉じる」をクリックしてテーブルを追加しない状態にする
  4. リボンの「デザイン」タブ→「クエリの種類」グループ→「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 NULLNULL判定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ステップ

  1. クエリデザインを開き、テーブルを追加せずに閉じる:「テーブルの表示」ダイアログが出たら「閉じる」ボタンをクリックする
  2. SQLビューに切り替えて構文を入力する:「デザイン」タブ→「SQL表示」をクリック。入力エリアに SELECT~UNION~SELECT~ の形式でSQL文を記述する
  3. 実行・確認後にクエリを保存する:「実行」ボタンまたはデータシートビューに切り替えて結果を確認し、問題の指示通りのクエリ名で保存する

試験でよく見落とされる点として、ORDER BY句はユニオンクエリ全体に対して最後のSELECT文の後に1つだけ書くことを覚えてください。最初のSELECT文にORDER BYを書いた場合はエラーになります。また、ユニオンクエリのORDER BYで使うフィールド名は、最初のSELECT文で使ったフィールド名(または列番号)を使います。

SQLビューの練習法:デザインビューとの往復で理解を深める

  1. デザインビューで単純な選択クエリを作り、SQLビューに切り替えて生成されたSQLを読む:デザインビューの操作がSQLのどの構文に対応するかを対応させながら覚える
  2. 集計クエリをデザインビューで作り、SQLビューのGROUP BY句を確認する:HAVING句がデザインビューの「抽出条件(集計行の下)」に対応することを確認する
  3. 2つのシンプルなテーブルを用意してユニオンクエリを手書きする:フィールド数一致のルールを体験する
  4. 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構文→保存」の流れを迷わずできるようにしてください。確実な得点源になります。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次