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

1. 丸型フィールドは互いに結合する必要があります。

1. 非常に多くのレコードをメモします。

1. レコード数は、より小さいことに注意してください。
等しくないフィールド値に基づいてテーブルを結合する
結合されたフィールドの等価性に基づいている必要はありません。 結合は、より大きい (>)、小さい (<)、または等しくない (<>) などの比較演算子に基づいて行うことができます。 等価に基づかない結合は、不等結合と呼ばれます。
等しくないフィールド値に基づいて、2つのデータソースの行を結合する場合は、不等結合を使用します。 通常、不等結合は、より大きい (>)、小さい (<)、等しい (>=)、またはそれ以下 (<=) の比較演算子に基づいています。 Not 等号 (<>) 演算子に基づく不等結合では、クロス結合としてほぼ同数の行を返すことができます。結果は解析が困難になることがあります。
不等結合の使用方法
不等結合はデザインビューではサポートされていません。 使用する場合は、SQL ビューを使用する必要があります。 ただし、デザインビューで結合を作成し、[SQL ビュー] に切り替えて、等号 (=) 比較演算子を見つけ、使用する演算子に変更することができます。 この操作を行うと、最初に SQL ビューで比較演算子を等号 (=) に戻すことができるようになった場合にのみ、デザインビューでクエリを開くことができます。
結合を削除する
Access で自動的に結合が作成されない場合、または誤って結合を作成する場合 (たとえば、データ型が異なる2つのフィールド間の結合など)、結合を削除できます。
-
クエリデザイングリッドで、削除する結合をクリックします。
-
Delキーを押します。
または
-
クエリデザイングリッドで、削除する結合を右クリックし、[削除] をクリックします。
注: このページは、自動翻訳によって翻訳されているため、文章校正のエラーや不正確な情報が含まれている可能性があります。 私たちの目的は、このコンテンツがお客様の役に立つようにすることです。 情報が役に立ったかどうか、ご意見をお寄せください。 参考までに、こちらから英語の記事をお読みいただけます。