ORACLE SQL リファレンス(逆引き)

ORACLE SQL リファレンス

Web oracle.se-free.com
外部結合(OUTER JOIN、(+))
スポンサード リンク

外部結合は、(+) または、OUTER JOIN句を使用します

WHERE 表1.列A (+) = 表2.列A 表2の列Aにしか存在しないデータも検索される
WHERE 表1.列A = 表2.列A(+) 表1の列Aにしか存在しないデータも検索される
FROM 表1 
  LEFT|RIGHT OUTER JOIN 表2
    ON ( 表1.列A = 表2.列A )
ANSI/ISO SQL99に対応した外部結合

LEFT OPUTER JOINと指定した場合は、表1の列Aにしか存在しないデータも検索される

RIGTH OPUTER JOINを指定した場合は、表2の列Aにしか存在しないデータも検索される


サンプル表「emp」データ
SQL> select * from emp;

EMP DEP JOB FIRST_NAME LAST_NAME SALARY
--- ---  --- ---------- ---------- ----------
E01 D01  J01 名字1     名前1     100
E02 D01  J01 名前2     名前2     250
E03 D02  J02 名前3     名前3     200
E04 D02  J03 名前4     名前4     200
E05 D02  J03 名前5     名前5     130
E06 D03  J03 名前6     名前6     150

サンプル表「dept」データ
SQL> select * from dept;

DEP DEPT_NAME
--- ----------
D01 総務部
D02 経理部
D04 営業部
D05 管理部


例1) 表「emp」と表「dept」の列「dept_id」で外部結合します。表「emp」にしか存在しないデータも検索します
SQL> select
  2   a.emp_id, a.dept_id, b.dept_id, b.dept_name
  3  from emp a,dept b
  4  where
  5   a.dept_id = b.dept_id (+);

EMP DEP DEP DEPT_NAME
--- --- --- ----------
E01 D01 D01 総務部
E02 D01 D01 総務部
E03 D02 D02 経理部
E04 D02 D02 経理部
E05 D02 D02 経理部
E06 D03


例2) 例1)と同じことをANSI/ISO SQL99に対応したSQL文で記述します
SQL> select
  2   a.emp_id, a.dept_id, b.dept_id, b.dept_name
  3  from emp a
  4  left outer join dept b
  5   on (a.dept_id = b.dept_id );

EMP DEP DEP DEPT_NAME
--- --- --- ----------
E01 D01 D01 総務部
E02 D01 D01 総務部
E03 D02 D02 経理部
E04 D02 D02 経理部
E05 D02 D02 経理部
E06 D03
 ”OUTER”は省略可能です


スポンサード リンク


内部結合(INNER JOIN)
外部結合(OUTER JOIN、(+))
インラインビューの利用
複雑なSQLの可読性を高める(WITH句)
スカラー副問合せ
複数のSELECT文の結果をマージする(UNION、UNION ALL)
2つのSELECT文の結果の差異を取得する(MINUS)
2つのSELECT文の結果の重複データを取得する(INTERSECT)

SQL(DML2) へ
忘れっぽいエンジニアのオラクルSQLリファレンス TOPへ