「顧客マスタの全件を表示しながら、注文がない顧客も一覧に残したい」「商品テーブルを基準に、在庫が未登録の品番だけを抽出したい」——こうしたケースでAccessのデフォルト設定(内部結合)を使うと、両テーブルに存在する行しか表示されず、欠損データを見落とす原因になります。
この問題を解決するのが外部結合(OUTER JOIN)です。左外部結合(LEFT JOIN)または右外部結合(RIGHT JOIN)を使うことで、一方のテーブルの全件を維持したまま、もう一方と照合できます。クエリデザインビューから数クリックで設定でき、MOS Access試験でも頻出の操作です。
本記事では、内部結合・左外部結合・右外部結合の違い、クエリデザインビューでの設定手順、実務シナリオ別の活用パターン、SQLビューでの構文確認、不一致クエリウィザードとの使い分け、MOS試験の出題ポイントを体系的に解説します。
内部結合・外部結合の違いを整理する
Accessのクエリで2つ以上のテーブルを結合するとき、どの行を結果に含めるかを決めるのが「結合の種類」です。
| 結合種類 | 表示されるレコード | 用途 |
|---|---|---|
| 内部結合(INNER JOIN) | 両テーブルに一致するレコードのみ | 一致データだけを抽出したいとき(デフォルト) |
| 左外部結合(LEFT JOIN) | 左テーブルの全件+右テーブルの一致分 | 左テーブル基準で全件表示し、右側が欠落した行も残したいとき |
| 右外部結合(RIGHT JOIN) | 右テーブルの全件+左テーブルの一致分 | 右テーブル基準で全件表示したいとき |
Accessのクエリデザインビューで結合線をダブルクリック(または右クリック)して「結合プロパティ」を開くと、選択肢が3種類表示されます。
- 1:両方のテーブルで結合フィールドが等しい行のみ(内部結合 / INNER JOIN)
- 2:左テーブルのすべてのレコードと、右テーブルの一致する行(左外部結合 / LEFT JOIN)
- 3:右テーブルのすべてのレコードと、左テーブルの一致する行(右外部結合 / RIGHT JOIN)
なお、デザインビューに追加した順番で「左テーブル」「右テーブル」が決まります。クエリを作り直さずにテーブルの順序だけ入れ替えることでLEFT/RIGHTを切り替えられますが、混乱しやすいため「基準にしたい(全件を残したい)テーブルを左に配置しLEFT JOINを使う」と統一する運用が実務では一般的です。
クエリデザインビューでの設定手順
手順1:クエリデザインビューを開く
リボンの「作成」タブ→「クエリデザイン」をクリックします。「テーブルの表示」ダイアログが開くので、結合したい2つのテーブル(例:T_顧客 と T_受注)を追加して「閉じる」を押します。
手順2:結合線を確認する
テーブル間に共通フィールド(例:顧客ID)があると、Accessが自動的に結合線を引きます。自動で引かれない場合は、一方のフィールドをドラッグしてもう一方のフィールドへドロップすると結合線が作成されます。
手順3:結合プロパティを変更する
結合線上を右クリック→「結合プロパティ」を選択します(または結合線をダブルクリック)。ダイアログが表示されるので、目的に応じて以下を選びます。
- 全顧客を表示(注文なしの顧客も含める)→ 選択肢2(LEFT JOIN)
- 全受注を表示(顧客マスタに未登録の受注も含める)→ 選択肢3(RIGHT JOIN)
「OK」を押すと結合線に矢印が付きます。矢印の向きが「全件を維持する側(FROM側)」を示しています。左向き矢印なら LEFT JOIN、右向き矢印なら RIGHT JOIN です。
手順4:フィールドを追加してクエリを実行する
各テーブルから必要なフィールドをデザイングリッドへドラッグし、ツールバーの「実行」(赤い!アイコン)またはリボンの「クエリツール」→「実行」をクリックします。LEFT JOINを設定した場合、右テーブルに一致行がないレコードの該当フィールドはNull(空白)で表示されます。
SQLビューでの構文確認
デザインビューで設定した結合は、SQLビュー(「ホーム」→「表示」→「SQLビュー」)で確認・編集できます。LEFT JOINの場合、SQLは次の形式になります。
SELECT T_顧客.顧客ID, T_顧客.顧客名, T_受注.受注日, T_受注.金額
FROM T_顧客 LEFT JOIN T_受注
ON T_顧客.顧客ID = T_受注.顧客ID;
RIGHT JOINの場合は LEFT JOIN を RIGHT JOIN に変えるだけです。SQLビューで直接書き換えることもでき、内部結合(INNER JOIN)への変更もここで行えます。
実務シナリオ別の活用パターン
シナリオ1:注文ゼロの顧客を全員リストアップする
T_顧客 LEFT JOIN T_受注 を設定し、「金額」フィールドの抽出条件に Is Null を入力します。受注テーブルに一致しないレコード(=注文ゼロの顧客)だけが絞り込まれます。これは「不一致クエリウィザード」と同じ結果を手動で実現するパターンです。
SELECT T_顧客.顧客ID, T_顧客.顧客名
FROM T_顧客 LEFT JOIN T_受注
ON T_顧客.顧客ID = T_受注.顧客ID
WHERE T_受注.顧客ID Is Null;
シナリオ2:全商品の在庫有無を一覧表示する
T_商品マスタ LEFT JOIN T_在庫 を設定し、商品マスタ全件を表示します。在庫テーブルに登録がない商品は在庫数フィールドがNullになるため、Nz([在庫数], 0) 演算フィールドを追加すると「0」として表示でき、在庫未登録品を一目で識別できます。
シナリオ3:担当者ごとの売上(担当なし案件含む)を集計する
T_受注 LEFT JOIN T_社員 を設定し、担当者IDがNullの受注(担当未割り当て)も集計対象に含めます。担当者名フィールドには「未割り当て」と表示させるため、IIf関数または Nz関数を使って表示を整えます。
SELECT IIf(IsNull([担当者名]), 未割り当て, [担当者名]) AS 担当, Sum([金額]) AS 売上合計
FROM T_受注 LEFT JOIN T_社員 ON T_受注.担当ID = T_社員.社員ID
GROUP BY IIf(IsNull([担当者名]), 未割り当て, [担当者名]);
シナリオ4:マスタ整備の欠落チェック(外部結合+Is Null条件)
T_受注の「商品ID」がT_商品マスタに存在しない異常データを検出します。T_受注 LEFT JOIN T_商品マスタ を組み、商品名フィールドの条件を Is Null にすると、マスタ未登録の商品IDが含まれる受注行だけが抽出できます。データ品質チェックの定番パターンです。
不一致クエリウィザードとの使い分け
「不一致クエリウィザード」(「作成」→「クエリウィザード」→「不一致クエリウィザード」)を使うと、上記シナリオ1・4と同様の結果が得られます。使い分けの判断基準は次のとおりです。
| 方法 | 向いているケース | 制限 |
|---|---|---|
| 不一致クエリウィザード | 「片方にない行」の単純抽出。手順が少なく素早い | Is Null条件が固定。カスタマイズしにくい |
| 外部結合+Is Null(手動) | 集計・IIf・演算フィールドを組み合わせた複雑なクエリ | 結合プロパティの理解が必要 |
ウィザードは作成後にデザインビューで編集できるので、ウィザードで土台を作ってからカスタマイズする手順も有効です。
よくある間違いと対処法
| 症状・エラー | 原因 | 対処法 |
|---|---|---|
| 外部結合設定なのに全件表示されない | フィルタ条件が右テーブルの非Nullフィールドを参照している | Is Null判定用の条件は Null を許容するフィールドに設定する |
| 結合線に矢印が表示されない | 内部結合(選択肢1)のまま変更されていない | 結合線を右クリック→「結合プロパティ」で選択肢2か3を選ぶ |
| 複数テーブル結合で「クエリを実行できません」エラー | 外部結合と内部結合が混在し競合している(Accessの制約) | 一方向の外部結合に統一するか、サブクエリ(FROM句のSELECT文)に分割する |
| LEFT JOINしたのにNullが出ない | テーブルの追加順が逆で実際にはRIGHT JOINになっている | SQLビューで FROM句の順序と JOIN種別を確認・修正する |
| 集計クエリとの組み合わせで行数が増える | 外部結合でNullが混入しGROUP BYが複数行に展開された | Nz関数でNullを既定値に変換してからGROUP BYする |
MOS Access試験での外部結合 出題ポイント
MOS Access 365&2019では、クエリの作成・変更がスキル項目に含まれ、結合の種類の設定が出題されます。次のポイントを確認しておきましょう。
- 結合プロパティの開き方:結合線を右クリックまたはダブルクリック → 「結合プロパティ」の操作手順
- 選択肢1・2・3の意味:どれがINNER/LEFT/RIGHTに対応するかを理解する
- 矢印の向きと全件表示の方向:矢印の根元が全件表示されるテーブル(FROM側)
- SQLビューでの確認:LEFT JOINと書かれた構文を読んで設定内容を把握できる
- Is Null条件との組み合わせ:不一致行だけを絞り込む数式パターン
MOS試験 外部結合チェックリスト
| 確認ポイント | 操作内容 | 難易度 |
|---|---|---|
| 結合プロパティを開く | 結合線を右クリック→「結合プロパティ」を選択できる | ★☆☆ |
| LEFT JOINを設定する | 選択肢2を選び、矢印が左向きになることを確認できる | ★☆☆ |
| 全件表示の動作を確認する | 右テーブルにないレコードがNullで表示されることを理解している | ★★☆ |
| Is Null条件で不一致行を抽出する | 右テーブルのフィールドに「Is Null」条件を入力して絞り込める | ★★☆ |
| SQLビューで JOIN種類を確認する | LEFT JOINの記述を読んで結合の種類を判断できる | ★★☆ |
| 不一致クエリウィザードと比較する | ウィザードで生成されたクエリのJOIN設定を確認・変更できる | ★★★ |
まとめ:外部結合で「全件表示+不一致検出」を制する
本記事のポイントをまとめます。
- 内部結合:両テーブルに一致する行のみ表示。デフォルト設定
- LEFT JOIN:左テーブルの全件+右テーブルの一致分を表示。一致しない行の右側フィールドはNull
- RIGHT JOIN:右テーブルの全件+左テーブルの一致分を表示
- 設定方法:クエリデザインビューで結合線を右クリック→「結合プロパティ」→選択肢2(LEFT)または3(RIGHT)
- 不一致行の抽出:外部結合設定後、右テーブルのフィールド条件に「Is Null」を入力する
- 実務用途:「注文ゼロの顧客」「在庫未登録の商品」「マスタ欠落データの検出」「担当者未割り当て集計」など
- 不一致クエリウィザードとの使い分け:単純抽出はウィザード、集計・演算フィールド追加は手動外部結合が有利
- MOS試験:結合プロパティの開き方・選択肢の意味・Is Null条件との組み合わせが頻出
内部結合だと消えてしまっていたデータも、外部結合を使えば「一致しない行」として可視化できます。「全件表示しながら欠落をゼロにしたい」という場面に出会ったら、まず結合プロパティを確認するクセをつけておきましょう。MOS試験では結合線の操作と結果の意味を正確に理解していれば確実に得点できる分野です。
PR
Microsoft Copilot for Microsoft 365活用大全
Excel・Word・PowerPoint・Teamsに加え、Accessを含むMicrosoft 365全体でのAI活用ノウハウを網羅。クエリ設計や外部結合など手作業で覚えたスキルをAIとどう組み合わせるかを理解するうえで手元に置きたい一冊です。
Access外部結合の操作に慣れたら、MOS Access試験の模擬問題でアウトプット練習もしてみましょう。当サイトではAccessクエリ設計・フォーム・レポートほか、Office全製品のMOS対策記事を随時公開しています。
