OracleのINNER JOIN(内部結合)
Oralceで複数のテーブルを結合するには「JOIN」を使います。
内部結合とは
結合には下記の種類があります。
- 内部結合(INNER JOIN)
- 外部結合(LEFT JOIN, RIGHT JOIN)
今回は、内部結合(INNER JOIN)について解説します。
内部結合は複数のテーブルを結合し、条件が一致したもののみを取得します。
外部結合は優先するテーブルであれば条件一致しなくても取得しますが、内部結合はそうではありません。外部結合はこちらを参照してください。
(INNER) JOIN ~
Oralceで内部結合するには、INNER JOIN句の前後に結合するテーブルを記述します。テーブル名の後にスペースを入れて別名を指定します。「INNER」は省略可能なので、ここでは省略します。(スピード重視)
「ON」は結合する列を指定します。列はテーブル名の別名を必ずつけておきます。
--内部結合 JOINを使用 SELECT {列} FROM {テーブル1} a (INNER) JOIN {テーブル2} b ON {a.列1}={b.列2} WHERE 条件; --内部結合 JOINを使用しない SELECT {列} FROM {テーブル1} a, {テーブル2} b WHERE {a.列1}={b.列2} AND 条件;
内部結合は複数のテーブルをそのまま結合し、一致したものを取得します。上記の例、(INNER) JOINでは{テーブル1}と{テーブル2}を結合し、一致したもののみ取得します。
「INNER」は省略可能なので、ここでは省略します。
内部結合は「JOIN」を使わず、結合条件をWHERE句に記述することもできます。
サンプルデータ
empテーブル
empno | empname |
A001 | 佐藤花子 |
A002 | 田中太郎 |
A003 | 加藤一 |
A004 | 青木花 |
A005 | 藤田学 |
tokyo_autテーブル
empno |
A001 |
A005 |
osaka_autテーブル
empno |
A001 |
A002 |
例1. INNER JOINで結合する
--INNER JOIN SELECT e.empno, e.empname, t.empno tokyo, o.empno osaka FROM emp e JOIN tokyo_aut t ON e.empno = t.empno JOIN osaka_aut o ON t.empno = o.empno WHERE e.empno < 'A999' ;
e.empno | e.empname | tokyo | osaka |
A001 | 佐藤花子 | A001 | A001 |
「emp」テーブルと「tokyo_aut」「osaka_aut」テーブルの2テーブルを「JOIN」で内部結合しました。
3つのテーブル「emp」「tokyo_aut」「osaka_aut」テーブルに一致するレコードのみがSELECTされます。
例2. WHEREで結合する(JOINを使用しないパターン)
--JOINを使用しない SELECT e.empno, e.empname, t.empno tokyo, o.empno osaka FROM emp e ,tokyo_aut t ,osaka_aut o WHERE e.empno < 'A999' AND e.empno = t.empno AND t.empno = o.empno ;
e.empno | e.empname | tokyo | osaka |
A001 | 佐藤花子 | A001 | A001 |
例1と同じ内部結合を「INNER JOIN」を使わずに書きました。
3つのテーブル「emp」「tokyo_aut」「osaka_aut」テーブルの結合条件をWHERE句に書きました。
以上、Oracleの内部結合「INNER JOIN」の使い方でした。
コメント