-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は左側のテーブル(下記例の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 件のコメント:
コメントを投稿