OracleのOUTER JOIN 外部結合(LEFT JOIN,RIGHT JOIN) 【SQL】

OracleのOUTER JOIN(外部結合)

Oralceで複数のテーブルを結合するには「JOIN」を使います。

結合には下記の種類があります。

  • 外部結合(OUTER JOIN)
  • 内部結合(INNER JOIN)

今回は、外部結合(OUTER JOIN)について解説します。

外部結合(OUTER JOIN)とは

外部結合(OUTER JOIN)は2種類あります。

  • LEFT OUTER JOIN
  • RIGHT OUTER JOIN

「結合」は複数のテーブルをひっつけるという意味です。外部結合は優先するテーブルをもとに結合します。

例えば、「優先するテーブルA」と「優先しないテーブルB」を結合する場合、Aテーブルは全レコード表示されますが、BテーブルはAテーブルと一致するものしか表示されません。

外部結合はこのように優先するテーブルをもとに結合するイメージです。もっともよく使われる結合になります。

LEFT OUTER JOINは左側のテーブル、RIGHT OUTER JOINは右側のテーブルをもとに結合します。

LEFT (OUTER) JOIN ~

外部結合するには、LEFT JOIN・RIGHT JOIN句の前後に結合するテーブルを記述します。テーブル名の後にスペースを入れて別名を指定します。「OUTER」は省略可能なので、ここでは省略します。(スピード重視)

そして「ON」で結合する条件を指定します。列はテーブル名の別名を必ずつけておきます。

--外部結合 LEFT JOIN
SELECT {列} FROM {テーブル1} a LEFT JOIN {テーブル2} b ON {a.列1}={b.列2}
WHERE 条件;

--外部結合 RIGHT JOIN
SELECT {列} FROM {テーブル1} a RIGHT JOIN {テーブル2} b ON {a.列1}={b.列2} 
WHERE 条件;

外部結合は優先するテーブルを元に結合します。上記の例、LEFT JOINでは{テーブル1}と{テーブル2}を結合しますが、{テーブル1}の全件に対し、{テーブル2}は条件に一致したもののみを結合します。

よって{テーブル1}は全レコードSELECTされます。{テーブル2}は{テーブル1}と結合できたレコードのみがSELECTされます。

RIGHT JOINはテーブルの優先度が逆になるので、テーブル2が全レコードSELECTされます。

サンプルデータ

emp

empno empname
A001 佐藤花子
A002 田中太郎
A003 加藤一
A004 青木花
A005 藤田学

tokyo_aut

empno
A001
A005

osaka_aut

empno
A001
A002

例1. LEFT JOINで結合する

--LEFT JOINの結合
SELECT e.empno, e.empname, t.empno tokyo, o.empno osaka
FROM emp e 
 LEFT JOIN tokyo_aut t ON e.empno = t.empno
 LEFT JOIN osaka_aut o ON e.empno = o.empno 
WHERE e.empno < 'A999'
;
e.empno e.empname tokyo osaka
A001 佐藤花子 A001 A001
A002 田中太郎 A002
A003 加藤一
A004 青木花
A005 藤田学 A005

3つのテーブル「emp」「tokyo_aut」「osaka_aut」をLEFT JOINで外部結合しました。

優先されるテーブルは全レコード表示

LEFT JOINなので優先されるテーブルは一番最初にでてくる「emp」テーブルです。empテーブルは全レコードSELECTされます。

この例では「emp」テーブルは5レコードあります。まず、このテーブルでSELECTする「e.empno」「 e.empname」はすべて表示されます。

結合されるテーブルは条件一致したレコードのみ表示

残りの2テーブル「tokyo_aut」「osaka_aut」は「ON」で指定された条件に一致する場合のみSELECTされます。

「tokyo_aut」テーブルは「empno」が「A001」「A005」のみなので、この2レコードのみ表示され、残りは表示されません。

「osaka_aut」テーブルは「empno」が「A001」「A002」のみなので、この2レコードのみ表示され、残りは表示されません。

外部結合はLEFT JOINとRIGHT JOINがありますが、通常はLEFT JOINを使うのが一般的なのでRIGHT JOINの例はここでは省略します。

以上、OracleのJOIN(LEFT JOIN,RIGHT JOIN)の使い方でした。

コメント