【SQL Server】INNER JOINとは(内部結合)

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(外部結合)はこちらを参照してください。

コメント

  1. KKKKK より:

    うわわっかりにく…