No.005
外部結合とは
2003/2007/2010/2013/2016
クエリで複数テーブルを合体して表示するときの、テーブルの結合方法に「内部結合」と「外部結合」の2つの種類があります。
内部結合は既定になっていますので、特に何も指定しない限り作成するクエリは内部結合となります。
まずは既定の内部結合がどういったものかを確認していくことにしましょう。
例えば次のような2つのテーブル、共通するフィールドは[作業ID]です。
今回リレーションシップは設定していませんが、[作業一覧]テーブルが一側(主)テーブル、[作業リスト]テーブルが多側(リレーション)テーブルであると、ざっくり見なすことができます。
共通フィールドで[作業ID]に注目すると、[作業一覧]テーブルでは「あ、い、う、え、お」と一通りのデータ、[作業リスト]テーブルでは「お」がなく、かわりに「ひ、ほ」という一覧にないものが出現しています。
では、2つのテーブルをクエリで普通に結合します。
これは既定の内部結合ですが、共通するレコードのみが表示されるため次のような結果となります。
結合している2つのテーブルの共通フィールド[作業ID]が合致するデータだけが表示されます。
なんだか作業が少ない感じがしますね。
一方にのみあるデータ、[作業一覧]テーブルにだけある「お」、[作業リスト]テーブルに突然ある「ひ、ほ」というデータは表示されていません。
では次に、外部結合にしてみましょう。
外部結合とは、一方のテーブルのレコードをすべて表示するという結合方法です。
設定は、クエリのデザイン ビューのフィールドリストをつないでいる結合線の斜めのところをダブルクリックし[結合プロパティ]を表示して設定します。
[結合プロパティ]の設定では、[1:]が内部結合、[2:]または[3:]のオプションが外部結合となっており、どちらのテーブルをすべて表示するかを指定します。
外部結合を設定すると、結合線の表示が矢印に変わります。
すべて表示する方から向かっての→となります。
上図の設定は、先の内部結合では表示されなかった[作業一覧]テーブルの「お」を表示するため[2:]の外部結合を指定します。
結果は、[作業一覧]テーブルのすべてのレコードが表示され、[作業リスト]テーブルの共通しているレコードも表示されます。
[作業一覧]テーブルの「お」のデータは表示されましたが、[作業リスト]テーブルには「お」のデータはなかったため、[日付]フィールドなど[作業リスト]テーブルから配置しているフィールドは空欄(Null)で表示されています。
この結果により、作業の一覧にある「お」という作業は、実際には作業されなかった(頻度が低い)ことがわかります。
ではついでですので、もう1つの外部結合を試してみましょう。
[作業リスト]テーブルのすべてのレコードを表示し、共通している[作業一覧]テーブルのレコードを表示します。
今度は[作業リスト]テーブルにある「ひ、ほ」という作業が表示されていますが、[作業一覧]テーブルには存在しない作業なので、[作業名]フィールドなどがNullになっています。
この結果により、「ひ、ほ」という作業は、本来の作業一覧にない突発的に請け負った作業であった、ということがわかります。
このように、外部結合を使用することにより、今まで見えてこなかった情報を得ることができます。
例えば、在庫商品の中で注文のない商品を確認したり、ホテルの空き部屋を検索したり、実績がない登録者をチェックしたりと、いろいろな場面で外部結合は活用できます。
これらの例は基本的に、整合性がとれたテーブル間での外部結合であり、一側(主)テーブルのすべてのレコードを表示して、多側(リレーション)テーブルのデータを合わせて結果表示します。
その場合、多側(リレーション)テーブルのレコード分の件数データが表示されます。
そのほか、今回の作業テーブルのような、整合性に欠けるデータを扱うときも、外部結合を利用して不備を調整していく場合があります。