ヘルプの森~Excel・Access・Office全般ヘルプデスクサイト

No.005

外部結合とは

2003/2007/2010/2013/2016

クエリで複数テーブルを合体して表示するときの、テーブルの結合方法に「内部結合」と「外部結合」の2つの種類があります。
内部結合は既定になっていますので、特に何も指定しない限り作成するクエリは内部結合となります。

まずは既定の内部結合がどういったものかを確認していくことにしましょう。

例えば次のような2つのテーブル、共通するフィールドは[作業ID]です。
今回リレーションシップは設定していませんが、[作業一覧]テーブルが一側(主)テーブル、[作業リスト]テーブルが多側(リレーション)テーブルであると、ざっくり見なすことができます。

一側テーブル多側テーブル

共通フィールドで[作業ID]に注目すると、[作業一覧]テーブルでは「あ、い、う、え、お」と一通りのデータ、[作業リスト]テーブルでは「お」がなく、かわりに「ひ、ほ」という一覧にないものが出現しています。

では、2つのテーブルをクエリで普通に結合します。

内部結合デザイン

これは既定の内部結合ですが、共通するレコードのみが表示されるため次のような結果となります。

内部結合結果

結合している2つのテーブルの共通フィールド[作業ID]が合致するデータだけが表示されます。
なんだか作業が少ない感じがしますね。
一方にのみあるデータ、[作業一覧]テーブルにだけある「お」、[作業リスト]テーブルに突然ある「ひ、ほ」というデータは表示されていません。

では次に、外部結合にしてみましょう。
外部結合とは、一方のテーブルのレコードをすべて表示するという結合方法です。

設定は、クエリのデザイン ビューのフィールドリストをつないでいる結合線の斜めのところをダブルクリックし[結合プロパティ]を表示して設定します。

外部結合デザイン

[結合プロパティ]の設定では、[1:]が内部結合、[2:]または[3:]のオプションが外部結合となっており、どちらのテーブルをすべて表示するかを指定します。
外部結合を設定すると、結合線の表示が矢印に変わります。
すべて表示する方から向かっての→となります。

上図の設定は、先の内部結合では表示されなかった[作業一覧]テーブルの「お」を表示するため[2:]の外部結合を指定します。

外部結合結果

結果は、[作業一覧]テーブルのすべてのレコードが表示され、[作業リスト]テーブルの共通しているレコードも表示されます。
[作業一覧]テーブルの「お」のデータは表示されましたが、[作業リスト]テーブルには「お」のデータはなかったため、[日付]フィールドなど[作業リスト]テーブルから配置しているフィールドは空欄(Null)で表示されています。

この結果により、作業の一覧にある「お」という作業は、実際には作業されなかった(頻度が低い)ことがわかります。

ではついでですので、もう1つの外部結合を試してみましょう。

外部結合デザイン

[作業リスト]テーブルのすべてのレコードを表示し、共通している[作業一覧]テーブルのレコードを表示します。

外部結合結果

今度は[作業リスト]テーブルにある「ひ、ほ」という作業が表示されていますが、[作業一覧]テーブルには存在しない作業なので、[作業名]フィールドなどがNullになっています。
この結果により、「ひ、ほ」という作業は、本来の作業一覧にない突発的に請け負った作業であった、ということがわかります。

このように、外部結合を使用することにより、今まで見えてこなかった情報を得ることができます。

例えば、在庫商品の中で注文のない商品を確認したり、ホテルの空き部屋を検索したり、実績がない登録者をチェックしたりと、いろいろな場面で外部結合は活用できます。
これらの例は基本的に、整合性がとれたテーブル間での外部結合であり、一側(主)テーブルのすべてのレコードを表示して、多側(リレーション)テーブルのデータを合わせて結果表示します。
その場合、多側(リレーション)テーブルのレコード分の件数データが表示されます。

そのほか、今回の作業テーブルのような、整合性に欠けるデータを扱うときも、外部結合を利用して不備を調整していく場合があります。

twitter hatena line pocket

関連ヘルプ

クエリの演算フィールドについて、式ビルダーの使い方
クロス集計クエリの結果のNull値を「0」と表示する
重複のない一通りデータを取得したい
テーブルのデータ型をクエリで変更する 《データ定義クエリ》
削除クエリで、別のテーブルまたはクエリと共通するレコードを一括削除する
複数テーブルをつなげてレコードを結合する 《ユニオン クエリ》
クエリで空白(でない)データを抽出したい、Accessの空白について
重複クエリとは
部分一致のパラメーター クエリを作成する、パラメーター クエリの設定方法
更新クエリでテーブルのデータを置換する(文字列の一部更新)
クロス集計クエリを元にパラメーター クエリを実行「~認識できません」エラー
特定のレコードのみ最初に並べ、他のレコードは普通に並べ替えする
基本的な抽出条件の書き方について
ワイルドカードや数式を使用した高度な抽出
クエリで連番、グループ連番をふる
アクション クエリのメッセージを非表示にするには