DBMSの結合:THETA、内部結合、外部結合、等結合の種類

⚡ スマートサマリー

DBMSにおける結合(JOIN)は、2つ以上のテーブルの行を主キーと外部キーを使用して結合する二項演算です。結合は、一致する行のみを返す内部結合と、一致しない行を保持し、欠落部分をNULLで埋める外部結合に分けられます。

  • 🔗 主な目的: 結合とは、結合条件に基づいて関連するテーブルを単一の結果セットに統合する処理です。
  • 🎯 内部結合: 両方のテーブルで条件を満たす行のみを返します。これがデフォルトの結合タイプです。
  • 📐 シータとEQUI: シータ結合は任意の比較演算子を使用できますが、EQUI結合は等価性のみを使用します。
  • 🔄 自然結合: 同一名称の属性を照合し、重複する列を削除します。
  • ⬅️ 左外部結合: 左側のテーブルのすべての行を保持し、右側のテーブルに一致する行がない場合はnullを埋めます。
  • 右外部結合: 右側のテーブルのすべての行を保持し、左側のテーブルに一致する行がない場合はnullを埋めます。
  • 🌐 完全外部結合: 一致するかどうかに関わらず、両方のテーブルのすべての行を保持します。

DBMSにおける結合(左、右)

DBMSにおける結合(JOIN)とは何ですか?

DBMSに参加する は、結合結果と選択を単一のステートメントで組み合わせることができるバイナリ操作です。結合条件を作成する目的は、2 つ以上のテーブルのデータを結合することです。テーブルは主キーと選択を使用して関連付けられます。 外部キー.

結合の種類

DBMS には主に XNUMX 種類の結合があります。

  1. 内部結合: Theta、Natural、EQUI
  2. 外側のジョイント: 左、右、全体

以下の表は、すべての結合タイプを概説した後、それぞれを例とともに説明します。

加入団体 返品 一致しない行
インナー(シータ/エクイ/ナチュラル) 両方のテーブルで条件に一致する行 ドロップされた
左外側 左側のすべての行とマッチ 左側は保持、右側は無効
右外側 右側の行とマッチ 右側は保持され、左側は無効です。
フルアウター 両方のテーブルのすべての行 両方から保持され、欠落している場合はnull

内部結合

内部結合 これは、指定された条件を満たす行を両方のテーブルから返すために使用されます。最も広く使用されている結合操作であり、デフォルトの結合タイプと考えることができます。

内部結合(または等価結合)は、結合述語で等価比較を使用する比較演算子ベースの結合です。ただし、「>」などの他の比較演算子を使用すると、等価結合とは呼ばれません。内部結合はさらに次の3つのサブタイプに分類されます。

  • シータ参加
  • 自然結合
  • EQUI結合

シータ結合

シータ結合 シータで表される条件に基づいて 2 つのテーブルを結合できます。シータ結合は、すべての比較演算子で機能します。記号で表されます。 θJOIN操作の一般的なケースは、シータ結合と呼ばれます。

構文:

A ⋈θ B

シータ結合では、選択基準に任意の条件を使用できます。

次の表を検討してください。

表A 表B
列1 列2 列1 列2
1 1 1 1
1 2 1 3

具体的な例を挙げますと、以下の通りです。

A ⋈ A.column 2 > B.column 2 (B)
A ⋈ A.列 2 > B.列 2 (B)
列1 列2
1 2

EQUI結合

EQUI結合 は、シータ結合が同値条件のみを使用する場合に実行されます。EQUI結合は、効率的に実装するのが最も難しい操作です。 RDBMSそして、これはRDBMSのパフォーマンス問題の原因の一つです。

具体的な例を挙げますと、以下の通りです。

A ⋈ A.column 2 = B.column 2 (B)
A ⋈ A.列 2 = B.列 2 (B)
列1 列2
1 1

自然結合 (⋈)

自然結合 比較演算子は使用しません。このタイプの結合では、属性は同じ名前とドメインを持つ必要があります。自然結合では、2つのリレーション間に少なくとも1つの共通属性が存在する必要があります。

これは、両方のリレーションに存在する属性に対して等価性を形成する選択を行い、重複する属性を削除します。

例: 以下の2つの表を検討してください。

C
正方形である
2 4
3 9
D
キューブ
2 8
3 18
C ⋈ D
C⋈D
正方形である キューブ
2 4 8
3 9 18

アウタージョイン

An アウタージョイン 結合された2つのテーブルの各レコードに、対応するレコードが存在する必要はありません。このタイプの結合では、他の対応するレコードが存在しない場合でも、テーブルは各レコードを保持します。外部結合には次の3つのタイプがあります。

  • 左外部結合
  • 右外部結合
  • 完全外部結合

左外部結合 (A ⟕ B)

左外部結合 左側のテーブルからすべての行を返します。右側のテーブルに一致する行が見つからない場合でも同様です。右側のテーブルに一致するレコードが見つからない場合は、nullが返されます。

左外部結合

以下の2つの表を考えてみましょう。

A
正方形である
2 4
3 9
4 16
B
キューブ
2 8
3 18
5 75
A Left Outer Join B
A ⟕ B
正方形である キューブ
2 4 8
3 9 18
4 16

右外側結合 (A ⟖ B)

右外部結合 右外部結合は、左テーブルに一致する行が見つからない場合でも、右テーブルのすべての列を返します。左テーブルに一致する行が見つからない場合は、nullが返されます。右外部結合は、左外部結合の逆です。

右外部結合

A Right Outer Join B
A ⟖ B
キューブ 正方形である
2 8 4
3 18 9
5 75

完全外部結合(A ⟗ B)

完全外部結合の場合、一致条件に関係なく、両方のリレーションのすべてのタプルが結果に含まれます。

例:

A Full Outer Join B
A ⟗ B
正方形である キューブ
2 4 8
3 9 18
4 16
5 75

よくあるご質問

内部結合は、両方のテーブルで一致する行のみを返します。外部結合は、一方または両方のテーブルで一致しない行も保持し、一致しない行はnullで埋めます。

シータ結合では、大なり演算子や小なり演算子など、任意の比較演算子を使用できます。EQUI結合は、等号演算子に限定されたシータ結合であり、等しい値のみを照合します。

どちらも等価性に基づいてマッチングを行いますが、自然結合では自動的に同じ名前の列にマッチングを行い、重複する列を削除します。一方、EQUI結合では条件を明示的に指定し、両方の列を保持します。

はい。スキーマと質問に基づいて、AIは結合タイプとキーを選択できます。たとえば、注文のない顧客を保持するために左結合を使用するなどです。誤った結合を行うと行数が変わってしまうため、結果を確認してください。

はい。AIは、結合キーが片側で一意でないために多対多の爆発的な関係が発生していることを検出し、条件を追加したり、最初に集計したりして、各一致が一度だけカウントされるようにすることを提案できます。