SQL Server INNER JOIN(内部結合)
内部結合と外部結合
SQLの「JOIN」について解説します。SQL Serverの「JOIN」は複数のテーブルを条件をつけて結合します。
大きくわけるとJOIN(結合)は2種類あります。
- 内部結合(INNER JOIN)
- 外部結合(OUTER JOIN)・・・LEFT JOIN、RIGHT JOIN、FULL JOIN
今回は、JOINの中でも「INNER JOIN」、いわゆる内部結合について解説します!
INNER JOIN とは
「結合」は複数のテーブルをひっつけるという意味です。複数のテーブルを結合して、1つの結果にまとめたいときに使います。
INNER JOIN(内部結合)は複数のテーブルを結合し、条件が一致したもののみを取得します。
OUTER JOIN(外部結合)は優先するテーブルが条件一致しなくても取得しますが、内部結合はそうではありません。
この図ではAテーブルとBテーブルの結合条件が一致したレコードを取得します。(赤塗部分)
INNER JOINの使い方
JOINを使用するパターン
--内部結合 JOINを使用 SELECT {列} FROM {Aテーブル} a (INNER) JOIN {Bテーブル} b ON {a.列1}={b.列2} WHERE 条件;
SQL Serverで内部結合するには、INNER JOIN句の前後に結合するテーブルを記述します。テーブル名の後にスペースを入れて別名を指定します。「INNER」は省略可能です。面倒なので現場では省略する人が多いです。
「ON」は結合する列を指定します。列はテーブル名の別名を必ずつけておきます。
内部結合は複数のテーブルを結合し、一致したものを取得します。上記の例、{Aテーブル}と{Bテーブル}をINNER JOINで結合し、一致したもののみ取得します。
JOINを使用しないパターン
--内部結合 JOINを使用しない SELECT {列} FROM {Aテーブル} a, {Bテーブル} b WHERE {a.列1}={b.列2} AND 条件;
内部結合は「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 < 'A100' ;
e.empno | e.empname | tokyo | osaka |
A001 | 佐藤花子 | A001 | A001 |
「emp」テーブルと「tokyo_aut」「osaka_aut」テーブルの2テーブルを「JOIN」で内部結合しました。
3つのテーブル「emp」「tokyo_aut」「osaka_aut」テーブルに「empno」が存在するレコード「empno=A001」のみ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 < 'A100' 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句に書きました。
以上、SQL ServerのINNER JOIN(内部結合)の使い方でした。
OUTER JOIN(外部結合)はこちらを参照してください。
コメント
うわわっかりにく…