外部結合~何の「外部」なのか~
外部結合とは
外部結合(outer join)は、内部結合の次によく使われるタイプの結合です。「内部」と「外部」という名称が示唆するように、これは内部結合と対になる演算です。「内部」が「直積の部分集合」という含意を持っていたことからもある程度、類推がつくと思いますが、「外部」とはどういう意味でしょう。
そう、おわかりですね。答えは「直積の部分集合にならない」です。誤解しないでもらいたいのは、常に部分集合にならないわけではなく、「データの状態によってそういうこともある」という点です。実際にコードを実行して、結果を確認してみましょう。
外部結合には、次の3種類があります。
このうち左外部結合と右外部結合は実質的には同じ機能を持っています。ただ、マスタとなるテーブルを左に書くなら左外部結合、右に書くなら右外部結合、というだけの話です。従って、リスト4の2つのコードの結果はまったく同じです(図5)。
図5の最終行を見るとわかるとおり、外部結合の結果には、マスタ側のテーブルだけに存在するキーがあった場合そのキーを削除せず、結果に保存するよう動作します。そのため、キーをすべて網羅するようなレイアウトの帳票を作る場合に多用されます。
内部結合と異なる点
図5の実行結果のうち、上6行は内部結合の結果と同じです。違うのは最終行。これは内部結合はもちろん、クロス結合の結果のどの行とも一致しません。いわば「外部に」はみ出しているわけです。これが外部結合の名前の由来です。外部結合の結果がクロス結合の結果の部分集合にならないのは、外部結合がマスタ側のテーブルの情報を保存するよう動作し、その結果NULLを生成するからです。一方、クロス結合や内部結合は、NULLを生成することはありません。
クロス結合、内部結合、外部結合の3つの関係をベン図で表現すると、図6のようになります。内部結合は完全にクロス結合に包含される形になり、外部結合は、クロス結合の枠内に収まらない部分を持ちます。