Access クエリに複数のデータ ソースを含める場合は、結合を使用して、データ ソース間の関連関係に基づいて表示するレコードを制限します。 また、結合を使用して両方のデータ ソースのレコードを結合すると、ソースからのレコードの各ペアがクエリ結果で 1 つのレコードになります。
この記事では、さまざまな種類の結合について説明し、クエリでそれらを使用する方法を示します。 既定では、クエリで使用する 2 つのデータ ソース間にリレーションシップが既に存在する場合、結合が自動的に作成されます。 互いに明確に対応するフィールドがある場合にも、結合が作成されます。 自動的に作成された参加を削除できます。 この記事では、テーブル リレーションシップの作成方法など、テーブル リレーションシップに関する基本的な情報を提供します。
注
テーブルを結合する場合と同じ方法でクエリを結合できます。また、両方を結合することもできます。
この記事の内容
- 概要
- 結合の種類
- 結合されている両方のテーブルに共通の値が存在する行を表示する
- 一方のテーブルのすべての行と、他方のテーブルの対応する行を表示する
- 両方のテーブルのすべての行を表示し、共通値が存在する場合は結合する
- クロス結合
- フィールド値の不等式に基づいてテーブルを結合する
- 参加を削除する
概要
データベースは、相互に論理的な関係を持つデータのテーブルのコレクションです。 リレーションシップを使用して、共通するフィールドでテーブルを接続します。 テーブルは任意の数のリレーションシップの一部にすることができますが、リレーションシップごとには常に 2 つのテーブルがあります。 クエリでは、リレーションシップは結合によって表されます。
テーブルをクエリに追加すると、Access によってテーブル間で定義されているリレーションシップに基づく結合が作成されます。 すでに定義されているリレーションシップを表していない場合でも、クエリで結合を手動で作成できます。 クエリのデータ ソースとして他のクエリ (テーブルの代わりに、またはテーブルに加えて) を使用する場合は、ソース クエリ間、およびそれらのクエリとデータ ソースとして使用するテーブルとの間に結合を作成できます。
結合は、クエリ操作に含まれるためにデータが一致する必要があるルールを確立するという点で、クエリ条件と同様に動作します。 条件とは異なり、結合では、結合条件を満たす各行のペアをレコードセットで結合して 1 つの行を作成することも指定します。
結合には、内部結合、外部結合、クロス結合、等しくない結合の 4 つの基本的なタイプがあります。 この記事では、使用できる各種類の結合、各種類を使用する理由、および結合を作成する方法について説明します。
結合は、クエリに対するものであり、テーブルとのリレーションシップと同じものです。2 つのソースのデータが、共通するデータ値に基づいて結合される方法を示します。 クエリのデザイン ビューでの結合の図を次に示します。このとき、結合のプロパティがダイアログ ボックスで開かれます。
テーブル間のこの線は、結合を表します。 結合をダブルクリックして [ 結合プロパティ] ダイアログ ボックス (図) を開き、結合を確認または変更します。
結合には方向性がある場合があります。 ダイアログ ボックスのこの領域では、結合に含まれるテーブルとテーブルの結合に使用されるフィールドが表示されます。
この領域によって結合の種類が決まります。オプション 1 は内部結合、2 は左外部結合、3 は右外部結合です。
両方のテーブルのフィールドを使用でき、特定のタスクに関連するデータがそれぞれに表示されます。 内部結合では、他のデータは含まれません。 外部結合では、1 つのテーブルの関連していないレコードもクエリの結果に含まれます。
結合の種類
結合には、内部結合、外部結合、クロス結合、等しくない結合の 4 つの基本的なタイプがあります。 クロス結合と不等号結合は高度な結合の種類であり、ほとんど使用されませんが、結合のしくみを完全に理解するには、それらについて知っておく必要があります。
内部結合: 両方のテーブルの関連データのみを組み合わせる
内部結合とは、対応するデータが関連テーブルにある場合にのみ Access がテーブルのデータを含め、その逆も同様です。 ほとんどの場合、内部結合を使用します。 結合を作成し、その結合の種類を指定しない場合、Access では内部結合が必要であると想定されます。 内部結合を使用すると、共有値に基づいて 2 つのソースからのデータを結合できるため、全体像がある場合にのみデータが表示されます。
外部結合: 関連するすべてのデータが正しく結合され、さらに 1 つのテーブルの残りのすべてのレコードが結合されている
外部結合は内部結合に似ていますが、テーブルの 1 つから残りの行を追加します。 外部結合には方向性があります。左外部結合には左テーブル (結合の最初のテーブル) のすべてのレコードが含まれ、右外部結合には右テーブル (結合の 2 番目のテーブル) のすべてのレコードが含まれます。
完全外部結合: 可能な場合はすべてのデータを結合
一部のシステムでは、外部結合には両方のテーブルのすべての行を含めることができます。行は対応するときに結合されます。 これは完全外部結合と呼ばれ、Access では明示的にサポートされていません。 ただし、クロス結合と条件を使用して同じ効果を得ることができます。
交差結合: すべてのデータをあらゆる方法で組み合わせる
ほとんどの場合、クロス結合は、2 つのテーブルをクエリに追加した後に、それらの結合を忘れた場合の副作用です。 Access では、この解釈は、1 つのテーブルのすべてのレコードと他のテーブルのすべてのレコード、つまり考えられるレコードのあらゆる組み合わせを表示したいことを意味します。 データを結合できないため、この種の結合では有用な結果が得られることはほとんどありません。 ただし、クロス結合が適切であるケースがいくつかあります。
等しくない結合: 通常の結合に似ていますが、別の比較を使用して行を結合します
等号でない結合では、等号 (=) 以外の演算子を使用して値を比較し、データを結合するかどうか、およびその方法を決定します。 不等な結合は明示的にはサポートされていませんが、クロス結合と条件を使用して同じ効果を得ることができます。
結合されている両方のテーブルに共通の値が存在する行を表示する
結合フィールドに一致する値を持つ行のみを表示する場合は、内部結合を使用します。 Access により内部結合が自動的に作成されます。
内部結合は最も一般的な種類の結合です。 結合されたフィールドのデータに基づいて、結合されたテーブルの 1 つのテーブルの行がもう一方のテーブルの行に対応することをクエリに伝えます。 内部結合を持つクエリが実行されると、両方の結合テーブルに共通の値が存在する行のみがクエリ操作に含まれます。
内部結合を使用する操作方法
ほとんどの場合、内部結合を使用するために何もする必要はありません。 クエリに追加したテーブルにリレーションシップが設定されている場合は、テーブルを追加すると、Access によって、関連するテーブルの各ペアの間に内部結合が自動的に作成されます。 参照整合性が適用されている場合、Access では、一対多リレーションシップの "一" 側にあるテーブルを示す結合行の上に "1" が表示され、どのテーブルが "多" 側にあるかを示すために無限大記号 (∞) が表示されます。
リレーションシップを作成していない場合でも、2 つのテーブルをクエリに追加し、それらのテーブルそれぞれに同じまたは互換性のあるデータ型のフィールドがあり、そのうちの 1 つの結合フィールドが主キーの場合、Access では内部結合が自動的に作成されます。 この場合、参照整合性が適用されないため、"1" 記号と "多数" 記号は表示されません。
クエリに追加されたクエリで、これらのクエリ間のリレーションシップを作成していない場合、Access はクエリ間やクエリとテーブル間の内部結合を自動的に作成しません。 通常は、自分で作成する必要があります。 内部結合を作成するには、あるデータ ソースから別のデータ ソースのフィールドにフィールドをドラッグします。 2 つのフィールド間に線が引かれ、結合が作成されたことが示されます。
内部結合の SQL 構文
内部結合は、以下に示すように、SQL の FROM 句で指定されます。
FROM table1 INNER JOIN table2 ON table1.Field1 Compare Table2.field2
INNER JOIN 操作には、次の指定項目があります。
| 引数 | 説明 |
|---|---|
| table1、table2 | 結合するレコードのあるテーブルの名前。 |
| field1、field2 | 結合されるフィールドの名前。 数値でない場合は、フィールドは同じデータ型で同じ種類のデータを含む必要がありますが、同じ名前にする必要はありません。 |
| compare | 任意の関係比較演算子: "="、"<"、">"、"<="、">="、"<>" |
内部結合構文の詳細については、トピック「 INNER JOIN 操作」を参照してください。
一方のテーブルのすべての行と、他方のテーブルの対応する行を表示する
外部結合では、結合の両側の行の一部が正確に対応するものの、一方のテーブルのすべての行と、結合の両側で共通の値を共有するもう一方のテーブルの行も含まれている必要があることをクエリに伝えます。
外部結合は、左外部結合または右外部結合にすることができます。 左外部結合では、SQL ステートメントの FROM 句の最初のテーブルのすべての行と、結合フィールドの両方のテーブルに共通する値が含まれている他のテーブルの行のみがクエリに含まれます。 右外部結合では、SQL ステートメントの FROM 句の 2 番目のテーブルのすべての行と、結合フィールドの両方のテーブルに共通する値が含まれている他のテーブルの行のみがクエリに含まれます。
注
結合をダブルクリックして [結合プロパティ ] ダイアログ ボックスを見ると、特定の結合で左テーブルと右テーブルのどちらが左テーブルなのかを簡単に確認できます。 SQL ビューに切り替えて、FROM 句を確認することもできます。
外部結合の一方の側の行の一部には他方のテーブルからの対応する行がないため、他のテーブルからそのクエリ結果で返される行のうち、行が対応していない場合、一部のフィールドは空になります。
外部結合を使用する操作方法
外部結合を作成するには、既存の内部結合を変更します。 内部結合が存在しない場合は、作成してから外部結合に変更します。
内部結合を外部結合に変更する
- クエリ デザイン ビューで、変更する結合をダブルクリックします。
[結合プロパティ] ダイアログ ボックスが表示されます。 - [ 結合プロパティ] ダイアログ ボックスで、オプション 2 とオプション 3 の隣にリストされている選択肢を確認します。
- 使用するオプションをクリックし、[OK] をクリックします。
- すべての行が含まれるデータ ソースから、結合条件を満たす行のみが含まれるデータ ソースへの矢印が表示され、結合が表示されます。
あいまいな外部結合
LEFT JOIN と INNER JOIN を含むクエリを作成すると、最初に実行する結合操作を Access で決定できないことがあります。 左結合と内部結合のどちらが先に実行されるかによって結果が異なるため、Access によってエラー メッセージが表示されます。
このエラーを修正するには、最初に実行する結合が明確になるようにクエリを変更する必要があります。
外部結合の SQL 構文
外部結合は、以下に示すように、SQL の FROM 句で指定します。
FROM table1 [ LEFT |RIGHT ] JOIN table2
ON table1.field1 compare table2.field2
LEFT JOIN 操作と RIGHT JOIN 操作には、次の指定項目があります。
| 引数 | 説明 |
|---|---|
| table1、table2 | 結合するレコードのあるテーブルの名前。 |
| field1、field2 | 結合されるフィールドの名前。 フィールドは同じデータ型で、同じ種類のデータを含む必要がありますが、同じ名前である必要はありません。 |
| compare | 任意の関係比較演算子: "="、"<"、">"、"<="、">="、"<>" |
外部結合構文の詳細については、 トピック「LEFT JOIN、RIGHT JOIN の操作」を参照してください。
両方のテーブルのすべての行を表示し、共通値が存在する場合は結合する
2 つのテーブルのすべての行を表示し、共通の値に基づいて行を結合する場合は、完全外部結合を使用します。 Access では、完全な外部結合は明示的にサポートされていませんが、共用体クエリを使用して同じ効果を得ることができます。 次の手順でこれを行う方法を説明しますが、ユニオン クエリの詳細については、「 関連項目 」セクションを参照してください。
ユニオン クエリを使用して完全外部結合を実行するには、次の手順を実行します。
完全外部結合に使用するフィールドに左外部結合を持つクエリを作成します。
[ホーム] タブの [表示] グループで [表示] をクリックし、[SQL ビュー] をクリックします。
CTRL+C を押して SQL コードをコピーします。
FROM 句の末尾にあるセミコロンを削除し、Enter キーを押します。
「UNION」と入力し、Enter キーを押します。
注
ユニオン クエリを使用して完全外部結合を実行する場合は、ALL キーワード (keyword)を使用しないでください。
手順 3 でコピーした SQL コードを貼り付けるには、Ctrl + V キーを押して貼り付けます。
貼り付けたコードで、 LEFT JOIN を RIGHT JOIN に変更します。
2 番目の FROM 句の末尾にあるセミコロンを削除し、Enter キーを押します。
FROM 句に示されている最初のテーブル (左側のテーブル) の結合フィールドの値が NULL であることを指定する WHERE 句を追加します。
たとえば、FROM 句が次のようになります。FROM Products RIGHT JOIN [Order Details] ON Products.ID = [Order Details].[Product ID]次の WHERE 句を追加します。
WHERE Products.ID IS NULLWHERE 句の末尾にセミコロン (;)を入力して、ユニオン クエリの終了を示します。
[デザイン] タブの [結果] グループで、[実行] をクリックします。
クロス結合
クロス結合は、Access で明示的に表されないという点で、内部結合や外部結合とは異なります。 クロス結合では、あるテーブルの各行が別のテーブルの各行と結合され、クロス積またはデカルト積と呼ばれるものが生成されます。 明示的に結合されていないテーブルを含むクエリを実行すると、結果は常にクロス積になります。 通常、クロス結合は意図的ではありませんが、便利な場合もあります。
なぜクロス結合を使用するのですか?
2 つのテーブルまたはクエリ間で考えられる行のあらゆる組み合わせを調べる場合は、クロス結合を使用します。 たとえば、あなたのビジネスが素晴らしい年を過ごし、顧客にリベートを提供することを検討しているとします。 各顧客の購入を合計するクエリを作成し、いくつかの可能なリベート率を含む小さなテーブルを作成し、クロス結合を実行する別のクエリで 2 つを結合できます。 最終的に、各顧客に対する仮想のリベートのセットを表示するクエリが生成されます。
クロス結合を使用する操作方法
クロス結合は、クエリにテーブルまたはクエリを含め、各テーブルまたはクエリに対して少なくとも 1 つの明示的な結合を作成しない場合は常に生成されます。 Access では、他のテーブルまたはクエリに明示的に結合されていない各テーブルまたはクエリのすべての行が、結果内の他のすべての行に結合されます。 前の段落のリベート シナリオを考えてみましょう。 顧客が 91 人いて、5 つの可能なリベート率を調べるとします。 クロス結合では、455 行 (91 と 5 の積) が生成されます。
ご想像のとおり、意図しないクロス結合によって、クエリ結果に膨大な数の行が作成される可能性があります。 さらに、これらの結果は一般的に無意味です。なぜなら、すべての行を他のすべての行と実際に結合するつもりがない場合、結果に表示される結合された行のほとんどが意味をなさないためです。 最後に、意図しないクロス結合を使用するクエリは、実行に非常に長い時間がかかる可能性があります。
1. 丸で囲まれたフィールドは、互いに結合されている必要があります。
1。 レコードの数が非常に多いことに注目してください。
1。 レコード数ははるかに少ないことに注意してください。
フィールド値の不等式に基づいてテーブルを結合する
結合は、結合されたフィールドの 等価性 に基づいている必要があります。 結合は、より大きい (>)、より小さい (<)、等しくない (<>) などの任意の比較演算子に基づいて設定できます。 等価性に基づかない結合は、不等結合と呼ばれます。
等しくないフィールド値に基づいて 2 つのデータ ソースの行を結合する場合は、不等結合を使用します。 通常、不等結合は、より大きい (>)、より小さい (<)、より大きい (>=)、またはより小さい (<=) の比較演算子のいずれかに基づいています。 等しくない (<>) 演算子に基づく等しくない結合は、クロス結合とほぼ同じ数の行を返す可能性があり、結果の解釈が困難になる可能性があります。
不等結合を使用する操作方法
デザイン ビューでは、等しくない結合はサポートされていません。 これらを使用する場合は、SQL ビューを使用して行う必要があります。 ただし、デザイン ビューで結合を作成し、SQL ビューに切り替えて、等号 (=) 比較演算子を見つけて、使用する演算子に変更することはできます。 この操作をした後は、SQL ビューで比較演算子を等しい (=) に戻した場合にのみ、デザイン ビューでクエリを再度開くことができます。
参加を削除する
Access によって不要な結合が自動的に作成される場合や、誤って結合を作成した場合 (データ型が異なる 2 つのフィールド間の結合など)、その結合を削除できます。
- クエリ デザイン グリッドで、削除する結合をクリックします。
- Delete キーを押します。
-または-
- クエリ デザイン グリッドで、削除する結合を右クリックし、[ 削除] をクリックします。
追加クエリを使用してレコードをテーブルに追加する ユニオン クエリを使用して複数の選択クエリの結果を結合する複数のテーブルに基づくクエリを作成するリレーションシップを作成、編集、または削除する