関係データベースは管理される個々のテーブル(表)同士を結合(join)することで様々なデータを取り出したり操作することができます。
このテーブルの結合は取り出したいデータによって、やり方がいくつかありますが、大きく「内部結合」と「外部結合」があります。
「結合の仕方に内部と外部がある?」って考えると分かり難いのですが、今回はこの結合方法に関して簡単に解説します!
先ずは直積を理解しよう!
二つのテーブルを結び付ける流れですが、先ずは準備として関係演算の「直積」を理解しましょう。
直積とは二つのテーブル(関係)のそれぞれの行(タプルとも呼びます)をすべて掛け合わせて(組み合わせて)一つのテーブルにすることです。
例をみて頂ければ分かり易いと思います。
それぞれのテーブルの行数を掛け合わせた数が直積の結果行となります。関係Rの行数が10行で関係Sの行数が5行の場合は「10×5=50」行となりますね。
上の例だと「3×3=9」行ですね。
内部結合とは?
直積したテーブルから選択、射影で必要な行と列を取り出すことを結合と呼びますが、内部結合の代表的なものに「θ結合(シータけつごう)」、「等結合」、「自然結合」があります。一つずつ順番に見ていきましょう。
θ結合(シータけつごう)
直積したテーブルから二つの属性X、Yを選択し、その二つの属性において、
選択条件「X θ Y」が成立する行(タプル)を取り出すものを「θ結合」と言います。
「θ(シータ)」ってなんじゃ?角度のことか?、ってことになるかと思いますが、ここでθは比較演算子を示し、代表的には以下のようなものがあります。
- < (小なり)
- > (大なり)
- <= (以下)
- >= (異常)
- = (等しい)
- <> (等しくない)
以下に例を上げてみます。
二つの関係RとSを直積した場合に、二つの属性R.AとS.Aを選び、比較演算子のθを「>」として、選択条件を「R.A > S.A」とします。
この時、関係RとSの直積R × Sより、R.A > S.Aの条件を満たす行を抽出した結果がθ結合となります。
θに入れる比較演算子によって結果が変わってくるのですね。
等結合
等結合は先ほどのθ結合で使う比較演算子に「=(イコール)」を選んだ結合のことです。
先程の関係RとSの直積において、R.AとS.Aを属性として選び、比較演算子を「=」とすると選択条件は「R.A=S.A」となり、この条件で直積からタプルを抽出します。
以下のようになりますね。
自然結合
自然結合は等結合が分かれば簡単です。
さきほどの等結合から、二つの関係の共通属性を一つ覗いて射影演算を行ったものです。
下の例にありますように等結合「R.A=S.A」の関係においては、R.AとS.Aは同じ値になりますので、一方の列(カラム)を削除することで、自然結合の結果となります。
自然結合はよく使われる結合方法になりますね。
外部結合とは?
内部結合は二つの関係(テーブル)において同じ属性で条件に一致するものを取り出してましたが、外部結合は二つの関係において片方にしかない場合も値を取り出す結合となります。
簡単に言うと、「どちらか片方にしかないテーブルの値も取り出す」ということになります。
外部結合には「左外部結合」、「右外部結合」、「完全外部結合」の3種類がありますので、それぞれ見ていきましょう。
左外部結合
一番よく使われる外部結合です。
下図の関係Rと関係Sの共通属性Aを用いた結合を行う時に、左側の関係Rの行は全て取り出し、右側の関係Sの行は左側の関係RとA列が一致するもののみ取り出します。そのため、関係Rに一致する行が存在しない場合、その列(ここではC列)には「NULL」が挿入されます。これが左外部結合です。
右外部結合
左外部結合と同様に、関係Rと関係Sの共通属性Aを用いた結合において、右側の関係Sの行は全て取り出し、結合した関係RのB列には関係SとA列が一致するもののみ取り出し、無ければNULLを入れます。
完全外部結合
完全外部結合は、左外部結合と右外部結合を合わせた形で、下図のように共通属性に関して、どちらかの列に存在する行を全て取り出す結合となります。
まとめ
今回はデータベースの関係テーブルの結合の種類に関して解説しました。
結合は先ず直積を行って、どの行(タプル)を残すかによって内部結合、外部結合と種類が分かれるのですね。
内部結合、外部結合ともに関係データベースにおいては良く使われると思いますが、内部結合は「自然結合」、外部結合は「左外部結合」を使うことが多いように思えます。
それぞれの言葉と結合の結果をしっかり結び付けておくと良いですね
以上です。