2013/08/22

08-05.データー操作語(DML)【Join02--Outer Join (LEFT, RIGHT, FULL OUTER JOIN)】

■Outer Joinとは?
 -Equi Joinは結合しようとする2つのテーブルの片方コラムに値がないとデーターを表示できない
 -同一条件で結合条件を果たす値が無い行を検索するためにOuter Joinを使用する
 -Outer Joinの演算子は「(+)」
 -結合時、値が無い側に「(+)」が位置する
 -Outer Join演算子は片方のみ使用できる

■Outer Joinの例

Equi JoinとOuter Joinの比較

--Equi Joinで部署番号を検索
SQL> SELECT DISTINCT(e.deptno), d.deptno, d.dname
  2  FROM emp e, dept d
  3  WHere e.deptno = d.deptno;

    DEPTNO     DEPTNO DNAME
---------- ---------- --------------
        20         20 RESEARCH
        30         30 SALES
        10         10 ACCOUNTING


--Outer Joinで部署番号を検索
SQL> SELECT DISTINCT(e.deptno), d.deptno
  2  FROM emp e, dept d
  3  WHere e.deptno(+) = d.deptno;

    DEPTNO     DEPTNO
---------- ----------
        10         10
                   40
        30         30
        20         20


Outer Joinを使用するテーブルに追加条件があれば、「(+)」演算子を使用する

--ename LIKE条件に(+)演算子が無い場合
SQL> SELECT DISTINCT(a.deptno), b.deptno
  2  FROM emp a, dept b
  3  WHERE a.deptno(+) = b.deptno
  4  AND a.ename LIKE '%';

    DEPTNO     DEPTNO
---------- ----------
        10         10
        30         30
        20         20


--ename LIKE条件に(+)演算子追加で正常にデーター検索ができる
SQL> SELECT DISTINCT(a.deptno), b.deptno
  2  FROM emp a, dept b
  3  WHERE a.deptno(+) = b.deptno
  4  AND a.ename(+) LIKE '%';

    DEPTNO     DEPTNO
---------- ----------
        10         10
                   40
        30         30
        20         20



■LEFT, RIGHT, FULL Outer Join
 -Oracle9iからANSI/ISO SQL標準のLEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOINを使える。

・LEFT OUTER JOIN
 -LEFT OUTER JOINは右側のテーブル(下記例のemp)に結合させるコラムの値がない場合

--LEFT OUTER JOIN例
SQL> SELECT DISTINCT(e.deptno), d.deptno
  2  FROM dept d
  3  LEFT OUTER JOIN emp e
  4  ON d.deptno = e.deptno;

    DEPTNO     DEPTNO
---------- ----------
        10         10
                   40
        30         30
        20         20


・RIGHT OUTER JOIN
 -RIGHT OUTER JOINは左側のテーブル(下記例のemp)に結合させるコラムの値がない場合

--RIGHT OUTER JOIN例
SQL> SELECT DISTINCT(e.deptno), d.deptno
  2  FROM emp e
  3  RIGHT OUTER JOIN dept d
  4  ON e.deptno = d.deptno;

    DEPTNO     DEPTNO
---------- ----------
        10         10
                   40
        30         30
        20         20

・FULL OUTER JOIN
 -FULL OUTER JOINは両方のテーブルにOUTER JOINを使用する場合

--FULL OUTER JOIN例
SQL> SELECT DISTINCT(e.deptno), d.deptno
  2  FROM emp e
  3  FULL OUTER JOIN dept d
  4  ON e.deptno = d.deptno;

    DEPTNO     DEPTNO
---------- ----------
        10         10
                   40
        30         30
        20         20

0 件のコメント:

コメントを投稿

QLOOKアクセス解析