【クエリ】テーブルの結合方法(内部結合・外部結合・他)

クエリ

Accessで複数のテーブルの情報をまとめて表示したい、という場合は、クエリで複数のテーブルを「結合」することで表示します。

「結合」はその用途に応じて様々な種類があります。この記事では、テーブルの結合方法及び結合の種類について、図解を交えながら解説していきます。

なお、クエリの基本的な解説については、こちらの記事で詳しく解説しています。
クエリをこれから学ぶ方は、こちらからぜひご参照ください。

クエリの結合とは

Accessでテーブルを作成する場合、通常は関連する情報を複数のテーブルに分けて作成します。例えば、「顧客テーブル」には顧客の名前や住所が、「注文テーブル」には顧客の注文した商品や日付が保存されている、といった具合です。

こういったテーブルを分割してデータ管理する手法を、「データベースの正規化」といいます。正規化に関しては以下の記事で詳しく解説しています。

クエリの結合とは、分割したテーブル同士を文字通り「つなげる」ことをいいます。

こんな感じでテーブル同士を線でつなげます。この線を「結合線」といいます。

クエリでテーブルを結合すると、共通する項目(今回のサンプルでは「部署」CD) を手がかりに、複数のテーブルの関連するデータを一つにまとめて表示できるようになります。まるで、別々のパズルのピースを組み合わせて、一枚の絵にするようなイメージです。

結合の設定方法

それでは、クエリのデザインビュー画面で、テーブルの結合を行っていきましょう。

まずは、デザインビューの「フィールドエリア」に結合する対象テーブルを追加します。(左側の「ナビゲーションウインドウ」か「テーブルの表示」ダイアログのどちらから追加しても構いません。)

クエリのデザインビューへ対象テーブルを追加する

結合するフィールド同士をマウスでドラッグしてつなげます。

フィールド同士を結合した様子

基本的にはマウスを使って手動で結合を行いますが、以下のいずれかの条件を満たす場合はテーブルを追加した時点で自動で結合されます。

自動で結合される条件
  • テーブル間にリレーションシップが定義されている場合
  • フィールド名・データ型・フィールドサイズが同じで、かつ一方のフィールドが主キーである場合

実は今回のサンプルクエリも条件に合致したので自動で結合されました!

基本的な結合は以上ですが、結合にはいくつかの種類があります。

結合された線(結合線)をダブルクリックしてみましょう。すると以下の画面(結合プロパティ)が表示されます。

結合種類の選択画面

結合プロパティでは結合の種類を選択します。基本は赤点線で囲った3種類の中から選択します。次項で種類ごとの解説を行います。

結合の種類

前項で触れた(結合プロパティの)3種類は、上から「内部結合」「右外部結合」「左外部結合」といいます。
また、プロパティ画面からは設定できない結合(完全外部結合)もありますので、併せて解説します。

内部結合

まずは、最も基本的な結合方法である「内部結合」から見ていきましょう。

内部結合は、結合する二つのテーブルに共通するデータが存在する場合のみ、その該当レコードを表示する方法です。

両方のテーブルにデータがあるものだけをピックアップするというイメージね

今回のサンプルでは、「M_組織マスタ」の「組織CD」と「T_社員管理」の「組織CD」を内部結合します。内部結合した見た目はこんな感じ↓です。

内部結合したクエリの実行結果をみてみましょう。両方のテーブルに同じ組織CDを持つデータ(部署CDがA01~A06)だけが表示されます。片方のテーブルにしか存在しない組織CDのデータ(A07、A08)は、結果には含まれません。

内部結合のデータ表示

外部結合

次に「外部結合」について解説します。外部結合では、指定した一方のテーブルのすべてのデータを表示し、それに対応するデータがもう一方のテーブルに存在する場合は一緒に表示します。もし対応するデータが存在しない場合は、その部分には「NULL(何もデータがない)」と表示されます。

外部結合には、「右外部結合」「左外部結合」「完全外部結合」の3つの種類があります。

右外部結合

右外部結合では、右側のテーブルのすべてのデータを表示します。左側のテーブルに対応するデータがあれば一緒に表示し、なければ左側のテーブルの項目はNULLで表示されます。「右側のテーブルは全部見たい!」という場合に便利です。

部署をメインにしてデータを閲覧したい場合に選ぶ結合ですね
部署CDの誤登録なども発見できます

右外部結合の見た目はこんな感じ↓です。右側テーブルから左側のテーブルへ結合線の矢印が伸びています。

右外部結合したクエリの実行結果をみてみましょう。今回のサンプルでは、「M_組織マスタ」のデータ全て(部署CDがA01~A07)と「T_社員管理」の「組織CD」が合致するデータ(部署CDがA01~A06)が表示され、合致しない部署CD(A08)はNULLで表示されます。

右外部結合のデータ表示

左外部結合

左外部結合は、右外部結合とは逆で、左側のテーブルのすべてのデータを表示します。右側のテーブルに対応するデータがあれば一緒に表示し、なければ右側のテーブルの項目はNULLで表示されます。「左側のテーブルは全部見たい!」という場合に便利です。

今回のサンプルでは、「T_社員管理」のデータ全て(部署CDがA01~A06,A08)と「M_組織マスタ」の「組織CD」が合致するデータ(部署CDがA01~A06)が表示され、合致しない部署CD(A07)はNULLで表示されます。

社員をメインにしてデータを閲覧したい場合に選ぶ結合にゃ
部署CDの誤登録なども発見できるにゃー

左外部結合の見た目はこんな感じ↓です。左側テーブルから右側のテーブルへ結合線の矢印が伸びています。

左外部結合したクエリの実行結果をみてみましょう。今回のサンプルでは、「T_社員管理」のデータ全て(部署CDがA01~A06,A08)と「M_組織マスタ」の「組織CD」が合致するデータ(部署CDがA01~A06)が表示され、合致しない部署CD(A07)はNULLで表示されます。

左外部結合のデータ表示

完全外部結合

完全外部結合は、左右両方のテーブルのすべてのデータを表示します。それぞれのテーブルに対応するデータがあれば一緒に表示し、片方のテーブルにしか存在しないデータについては、対応するもう一方のテーブルの項目はNULLで表示されます。「どちらのテーブルの情報も漏れなく見たい!」という場合に便利です。

ただし、完全外部結合はクエリの「デザインビュー」ではなく「SQLビュー」を使用する必要があります。具体的には、前述した「右外部結合」と「左外部結合」をクエリで作成し、それらを「ユニオンクエリ」を使って縦に連結します。

これは図を見ていただくのが、一目瞭然です。完全外部結合にすることで、部署CDが合致していないレコードも全て表示されます。

完全外部結合のデータ表示

これを実現するためのSQLビューは以下のように記述します。

SQLビューで完全外部結合の記載例

中央部分に記載されているのがSQLの「UNION句」です。これは2つのSELECT文で抽出したデータを統合することができます。今回のサンプルでは、上部が左外部結合クエリのSELECT文、下部が右外部結合クエリのSELECT文で、これらを縦に2つ積み上げた状態になります。

あまり使用するケースは少ないかもしれませんが、知識として覚えておいてください。

リレーションシップとの違い

「テーブルに結合線を引いて結合する」という意味では、似た操作に「リレーションシップ」があります。

リレーションシップはテーブル同士を関連付ける定義であり、クエリは実際にデータ表示を行うオブジェクトです。両者は異なる手続きですが、密接に関連もしています。

前述の「右外部結合」「左外部結合」は、一方のテーブルに該当データが存在しない場合はNULLとして表示される旨説明しましたが、そもそもリレーションシップで関連付けておくと、テーブルへのデータ入力時点でデータ整合性のエラーとなります。

リレーションシップはデータに矛盾が生じないよう整合性を図る役割があります。詳しくはこちらの記事をご参照ください。

まとめ

クエリにおけるテーブルの結合について、基本的な結合の考え方から、具体的な結合方法までご説明しました。
ひとまず各結合方法の特性だけ把握しておけば、今はピンと来なくとも必要になった時点でスムーズにクエリを作成できると思います。

タイトルとURLをコピーしました