SQLアタマアカデミー

第10回 結合大全 (3)外部結合

この記事を読むのに必要な時間:およそ 1 分

外部結合~何の「外部」なのか~

外部結合とは

外部結合outer joinは,内部結合の次によく使われるタイプの結合です。⁠内部」「外部」という名称が示唆するように,これは内部結合と対になる演算です。⁠内部」「直積の部分集合」という含意を持っていたことからもある程度,類推がつくと思いますが,⁠外部」とはどういう意味でしょう。

そう,おわかりですね。答えは直積の部分集合にならないです。誤解しないでもらいたいのは,常に部分集合にならないわけではなく,⁠データの状態によってそういうこともある」という点です。実際にコードを実行して,結果を確認してみましょう。

外部結合には,次の3種類があります。

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

このうち左外部結合と右外部結合は実質的には同じ機能を持っています。ただ,マスタとなるテーブルを左に書くなら左外部結合,右に書くなら右外部結合,というだけの話です。従って,リスト4の2つのコードの結果はまったく同じです図5)⁠

リスト4 左外部結合と右外部結合

--左外部結合の場合(左のテーブルがマスタ)
SELECT E.emp_id, E.emp_name, E.dept_id, D.dept_name
  FROM Departments D LEFT OUTER JOIN Employees E
    ON E.dept_id = D.dept_id;
--右外部結合の場合(右のテーブルがマスタ)
SELECT E.emp_id, E.emp_name, D.dept_id, D.dept_name
  FROM Employees E RIGHT OUTER JOIN Departments D
    ON E.dept_id = D.dept_id;

図5 リスト4の実行結果

EMP_ID EMP_NAME DEPT_ID DEPT_NAME
------ -------- ------- ---------
001    石田     10      総務
002    小笠原   11      人事
003    夏目     11      人事
004    米田     12      開発
005    釜本     12      開発
006    岩瀬     12      開発
NULL   NULL     13      営業 ←この行はクロス結合では作られない

図5の最終行を見るとわかるとおり,外部結合の結果には,マスタ側のテーブルだけに存在するキーがあった場合そのキーを削除せず,結果に保存するよう動作します。そのため,キーをすべて網羅するようなレイアウトの帳票を作る場合に多用されます。

内部結合と異なる点

図5の実行結果のうち,上6行は内部結合の結果と同じです。違うのは最終行。これは内部結合はもちろん,クロス結合の結果のどの行とも一致しません。いわば「外部に」はみ出しているわけです。これが外部結合の名前の由来です。外部結合の結果がクロス結合の結果の部分集合にならないのは,外部結合がマスタ側のテーブルの情報を保存するよう動作し,その結果NULLを生成するからです。一方,クロス結合や内部結合は,NULLを生成することはありません。

クロス結合,内部結合,外部結合の3つの関係をベン図で表現すると,図6のようになります。内部結合は完全にクロス結合に包含される形になり,外部結合は,クロス結合の枠内に収まらない部分を持ちます。

図6 クロス結合,内部結合,外部結合の関係

図6 クロス結合,内部結合,外部結合の関係

著者プロフィール

ミック

SI企業に勤務するDBエンジニア。主にデータウェアハウス業務に従事している。自身のサイト「リレーショナル・データベースの世界」でデータベースとSQLについての技術情報を公開している。『Web+DB Press』で「SQLアタマアカデミー」を連載中。

著書:『達人に学ぶ SQL徹底指南書』(翔泳社、2008)訳書:J.セルコ『SQLパズル 第2版』(翔泳社、2007)

SQLアタマアカデミー:サポートページ

コメント

コメントの記入