PR

Accessテーブルの結合操作 内部結合と外部結合

クエリ

データベースでは正規化をする際に、重複するレコードは別のテーブルに保存し、各キー項目でリレーションを設定することで、データの整合性等を担保します。

テーブルをキー項目で結合する際に、起点とするテーブルの全レコードを表示するか、またはキー項目で結合できるレコードを表示するかで、その結合方法が変わります。今回は、テーブル結合に際して、内部結合と外部結合について紹介をします。

スポンサーリンク

サンプルデータについて

今回の説明に際しては、次のようなテーブルを作成します。

表1 結合操作テーブル

フィールド名 データ型
品目ID オートナンバー型
品目 短いテキスト
単価 通貨型

表2 結合操作サブテーブル

フィールド名 データ型
メインID オートナンバー型
品目ID 数値型
購入数量 数値型

ここで、これらテーブルは「品目ID」フィールドでリレーションを設定することになります。
次に、サンプルデータを見ていきましょう。

表3 結合操作テーブルに保存したサンプルデータ

品目ID 品目 単価
1 鉛筆 ¥100
2 消しゴム ¥120
3 定規 ¥80
4 ボールペン ¥110
5 コンパス ¥200

 

表4 結合操作サブテーブルに保存したサンプルデータ

メインID 品目ID 購入数量
1 1 10
2 3 5
3 4 1
4 2 9

それでは、これらデータを用いて結合方法を見ていきましょう。

内部結合について(INNER JOIN)

今回のサンプルデータの場合、「品目ID」フィールドの値で、「結合操作テーブル」と「結合操作サブテーブル」のリレーションを設定します。まず、テーブルの結合に先立ってサンプルクエリを作成します(今回は、「結合操作について」というクエリ名称にしました。)。
図1に示すように、 クエリ設定画面にテーブルの追加で「結合操作テーブル」と「結合操作サブテーブル」を挿入します。続いて、結合操作テーブルの「品目ID」フィールドを結合操作サブテーブルの「品目ID」までドラッグアンドドロップします。これにより「品目ID」フィールド間でのテーブル結合ができました。

図1 テーブル間を内部結合する方法

さて、この結合操作により、どのようにレコードが表示されるかを見てみます。クエリの【フィールド】項目に「品目」、「単価」及び「購入数量」フィールドを設定した後、表示アイコン中のデータシートビューに切り替えてください。すると、表5に示す結果が得られます。

表5 結合操作テーブルと結合操作サブテーブルを内部結合した結果

品目 単価 購入数量
鉛筆 ¥100 10
消しゴム ¥120 9
定規 ¥80 5
ボールペン ¥110 1

この出力方法は、主となるテーブル(今回の場合は、「結合操作テーブル」が主となるテーブルになります。)と副となるテーブル(今回の場合は、「結合操作サブテーブル」)の両方にレコードがある場合に、対象となるレコードを結合をした形で表示します。そして、このようなテーブル間の結合方法を「内部結合」と呼びます。

内部結合の場合、結合するテーブル間のレコードが一致するものだけを出力することになるため、「結合操作サブテーブル」にレコードがない「コンパス」については出力されません。
なお、図1に示す方法では、自動的に内部結合が採用されます。

また、この際のSQL文は次のように記載されます。

SELECT 結合操作テーブル.品目, 結合操作テーブル.単価, 結合操作サブテーブル.購入数量
FROM 結合操作サブテーブル INNER JOIN 結合操作テーブル ON 結合操作サブテーブル.品目ID = 結合操作テーブル.品目ID;

ここで、着目していただきたい点は、「FROM A INNER JOIN B ON A.field = B.field」の記載です。これは、Aのテーブルを主に、Bのテーブルを副とし、A.fieldとB.fieldに一致するレコードを結合して出力するという意味になります。

スポンサーリンク

外部結合について(OUTER JOIN / RIGHT JOIN)

内部結合では、主テーブルと副テーブルを結合するためのフィールドに同じデータが登録されていることが前提でした。先の例を考えると、「品目ID」でコンパスに相当する「5」が両テーブルになかったためレコード表示がされませんでした。しかしながら、購入数量がなくても、全品目の一覧を確認したい場合があります。この場合、内部結合ではなく外部結合をする必要がありますので、その方法を見ていきましょう。

まずは、先ほど作成したクエリのリレーション線を右クリックし、「結合プロパティ」を選択します。結合プロパティダイアログボックスが表示されるため、「3: 結合操作テーブルの全レコードと結合操作サブテーブルの同じ結合フィールドのレコードだけを含める。」を選択します。

図2 外部結合の設定方法

これにより、リレーション線が結合操作テーブルの「品目ID」から結合操作サブテーブルの「品目ID」に向かった矢印になります。続いて、データシートビューでレコードを表示すると、今度は「コンパス」のレコードも含んだ結果が出力されるようになります。ただし、結合操作サブテーブルに「コンパス」に該当するレコードがないため、結合操作サブテーブルに属する「購入数量」フィールドの値は空白になっています。このような結合方法を「外部結合」と呼びます。

図3 外部結合の設定状況及び出力結果

表6 結合操作テーブルと結合操作サブテーブルを外部結合した結果
品目 単価 購入数量
鉛筆 ¥100 10
消しゴム ¥120 9
定規 ¥80 5
ボールペン ¥110 1
コンパス ¥200  

こちらについても、SQL文を確認してみましょう。

SELECT 結合操作テーブル.品目, 結合操作テーブル.単価, 結合操作サブテーブル.購入数量
FROM 結合操作サブテーブル RIGHT JOIN 結合操作テーブル ON 結合操作サブテーブル.品目ID = 結合操作テーブル.品目ID;

ここで、着目していただきたい点は、「FROM A RIGHT JOIN B ON A.field = B.field」の記載です。これは、Aのテーブルを主に、Bのテーブルを副とし、A.fieldとB.fieldで結合し、かつ、AのテーブルにBのテーブルと一致するレコードが無くてもAテーブルのレコードは全て出力するという意味になります。なお、RIGHT JOINの代わりにLEFT JOINとすると、Bテーブルが主、Aテーブルが副となります。

まとめ

今回は、テーブル間の結合方法として内部結合と外部結合を紹介しました。クエリの操作でこれら結合を簡単に設定することができますが、どのようなレコードを出力したいかによって、その結合方法を選択するように設計をしてください。そして、結合方法を上手く活用することでデータの抽出を効率的に行い、業務の改善を図っていただければと思います。

スポンサーリンク

Kindle Unlimitedにサインアップして無料体験に登録する
Kindle Unlimitedに登録すると、人気のシリーズ、ベストセラー、名作などに好きなだけアクセスして、シームレスなデジタル読書体験を実現できます。

コメント

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