データベース結合の種類

結合は、データベースの基本機能です。この機能を使用すると、2 つの異なるテーブルおよびデータベースの内容を、両方の共通フィールド (結合条件) に基づいて、単一のビューにマージできます。詳細については、テーブルおよびデータベース結合の概要を参照してください。

ドキュメントで複数のテーブルおよびデータベースのデータを使用している場合、サポートされているデータベース結合の種類を使用して結合を行う必要があります。

BarTender でサポートされているさまざまな結合の種類の例で参照するサンプルテーブルを次に示します。テーブル A は従業員とその部門 ID のリストです。テーブル B は部門名と部門 ID のリストです。結合条件として使用する共通のフィールドは DepartmentID (部門 ID) です。

テーブル A

FirstName (名)

DepartmentID (部門 ID)

Joe

31

Jane

33

Mark

33

Mary

34

Dan

34

Donna

NULL

テーブル B

DepartmentID (部門 ID)

DepartmentName (部門名)

31

販売

33

エンジニアリング

34

事務

35

マーケティング

BarTender は、マルチデータベースの結合において次の結合の種類をサポートします。

[データベース設定ウィザード] では、使用可能な結合の種類はデータベースプロバイダでサポートされている結合に制限されます。たとえば、OLEDB データベースのデータベース結合を作成する場合、使用できるのは「内部結合」の結合の種類だけです。この制限を回避するために、テーブルごとに個別のデータベース接続を作成し、[データベースの設定] ダイアログの [マルチデータベースの結合] ページを使用して結合を作成できます。

Closed内部結合

「内部結合」は、一般的な結合コマンドで、既定の結合の種類として扱われます。内部結合では、指定した結合フィールドの値に一致する指定テーブルのすべての行が返されて結合されることによって新しい結果が作成されます。テーブル A の行とテーブル B の行の間で一致がない場合、その行は結果から除外されます。

サンプルテーブルでは、結合条件として DepartmentID を使用する内部結合では、次の結果セットが取得されます。

FirstName (名)

DepartmentID (部門 ID)

DepartmentName (部門名)

Joe

31

販売

Jane

33

エンジニアリング

Mark

33

エンジニアリング

Mary

34

事務

Dan

34

事務

テーブル A では Donna の部門 ID が NULL として表示されているので、Donna は結果の内部結合テーブルに含まれていません。同様に、テーブル B に含まれない部門 ID に Donna が割り当てられている場合、Donna に関連付けられる行がないので Donna は表示されません。

NULL値は他の値とは異なる方法で処理され、0(ゼロ)値や他のNULL値と比較することはできません。このため、内部結合では、同等のフィールド値がないので、結合条件で使用するフィールドに NULL 値を含む行を返すことができません。

Closed左外部結合

「左外部結合」は、右側のテーブル (テーブル B) に一致行がない場合でも左側のテーブル (テーブル A) からすべての行が返されるという点で内部結合と異なります。右のテーブルに一致行のない左側のテーブルの行は、NULL 値と共に結合結果に一覧表示され、右側のテーブルに一致行がないことが示されます。次の例では、次のテーブルの "Donna" の場合のように、割り当てられた部門がない場合でも、結果セットにすべての従業員が一覧表示されます。

FirstName (名)

DepartmentID (部門 ID)

DepartmentName (部門名)

Joe

31

販売

Jane

33

エンジニアリング

Mark

33

エンジニアリング

Mary

34

事務

Dan

34

事務

Donna

NULL

NULL

Closed右外部結合

「右外部結合」の動作は左外部結合と完全に逆で、左側のテーブル (テーブル A) に一致行がない場合でも右側のテーブル (テーブル B) のすべてのエントリが結果セットで返されます。次の例では、次のテーブルの「マーケティング」部門の場合のように、部門に関連付けられた従業員がいない場合でも、結果セットにすべての部門が一覧表示されます。

FirstName (名)

DepartmentID (部門 ID)

DepartmentName (部門名)

Joe

31

販売

Jane

33

エンジニアリング

Mark

33

エンジニアリング

Mary

34

事務

Dan

34

事務

NULL

35

マーケティング

Closed全外部結合

「全外部結合」では、もう一方のテーブルの一致値が行にない場合でも、右側と左側の両方のテーブルのすべての行が結果に含まれます。もう一方のテーブルに一致行がない行の場合、不足している値は NULL として返されます。次の例の結果には、「マーケティング」部門 (従業員なし) と従業員 "Donna" (割り当て部門なし) の両方が含まれます。

FirstName (名)

DepartmentID (部門 ID)

DepartmentName (部門名)

Joe

31

販売

Jane

33

エンジニアリング

Mark

33

エンジニアリング

Mary

34

事務

Dan

34

事務

Donna

NULL

NULL

NULL

35

マーケティング

関連トピック