【SQL Server】LEFT JOIN・RIGHT JOINとは(外部結合)

SQL ServerのOUTER JOIN(外部結合)

結合の種類

SQLの「JOIN」について解説します。SQL Serverの「JOIN」は複数のテーブルを条件をつけて結合します。

大きくわけるとJOIN(結合)に2種類があります。

  • 外部結合(OUTER JOIN)・・・LEFT JOIN、RIGHT JOIN、FULL JOIN
  • 内部結合(INNER JOIN)

今回は、外部結合(OUTER JOIN)のLEFT JOIN、RIGHT JOINについて解説します。

参照:外部結合の使用 – TechNet – Microsoft

外部結合(OUTER JOIN)とは

今回は、2種類の外部結合(OUTER JOIN)について解説します。

  • LEFT OUTER JOIN・・・左外部結合
  • RIGHT OUTER JOIN・・・右外部結合

「結合」は複数のテーブルをひっつけるという意味です。複数のテーブルを結合して、1つの結果にまとめたいときに使います。

外部結合は優先するテーブルをもとに結合します。

左外部結合(LEFT OUTER JOIN)

例えば、「優先するテーブルA」と「優先しないテーブルB」を結合する場合、Aテーブルは全レコード表示されますが、BテーブルはAテーブルと一致するものしか表示されません。

外部結合は優先するテーブルをもとに結合します。

LEFT JOINは左側のテーブル(上図)、RIGHT JOIN(下図)は右側のテーブルを優先して結合します。

右外部結合(RIGHT OUTER JOIN)

結合でもっともよく使われる結合になります。

LEFT JOIN

LEFT JOIN(左外部結合)するには、LEFT JOIN句の前後に結合するテーブルを記述します。テーブル名の後にスペースを入れて別名を指定します。「OUTER」は省略可能なので、ここでは省略します。

そして「ON」で結合する条件を指定します。列はテーブル名の別名を必ずつけておきます。

--外部結合 LEFT JOIN
SELECT {列} FROM {Aテーブル} a LEFT JOIN {Bテーブル} b ON {a.列1}={b.列2}
WHERE 条件;

外部結合は優先するテーブルを元に結合します。

上記の例、LEFT JOINでは{Aテーブル}と{Bテーブル}を外部結合します。LEFT JOINで優先されるのはAテーブルです。

優先テーブル{Aテーブル}は全件を取得しますが、{Bテーブル}は条件に一致したもののみを取得します。

RIGHT JOIN

--外部結合 RIGHT JOIN
SELECT {列} FROM {Aテーブル} a RIGHT JOIN {Bテーブル} b ON {a.列1}={b.列2} 
WHERE 条件;

RIGHT JOIN(右外部結合)はテーブルの優先度が逆になるので、Bテーブルは全レコード取得し、Aテーブルは結合条件に一致したもののみを取得します。

 

サンプルデータ

emp

empno empname
A001 佐藤花子
A002 田中太郎
A003 加藤一
A004 青木花
A005 藤田学

tokyo_aut

empno
A001
A005
A010

osaka_aut

empno
A001
A002
A009

例1. 【SQL】LEFT JOINで複数テーブルを結合する

--LEFT JOINの結合
SELECT e.empno, e.empname, t.empno tokyo, o.empno osaka
FROM emp e 
 LEFT JOIN tokyo_aut t ON e.empno = t.empno
 LEFT JOIN osaka_aut o ON e.empno = o.empno 
WHERE e.empno < 'A100'
;
e.empno e.empname tokyo osaka
A001 佐藤花子 A001 A001
A002 田中太郎 A002
A003 加藤一
A004 青木花
A005 藤田学 A005

3つのテーブル「emp」「tokyo_aut」「osaka_aut」をLEFT JOINで外部結合しました。

優先されるテーブルは全レコード表示

SQLを見てください。LEFT JOINで優先されるテーブルは左側にある「emp」テーブルです。empテーブルは全レコードSELECTされます。

この例では「emp」テーブルは5レコードあります。「emp」テーブルの項目「e.empno」「 e.empname」はすべて表示されます。

結合されるテーブルは条件一致したレコードのみ表示

残りの2テーブル「tokyo_aut」「osaka_aut」は「ON」で指定された条件に一致する場合のみSELECTされます。

「tokyo_aut」テーブルは「empno」が「A001」「A005」のみなので、この2レコードのみ表示されます。「A010」は結合条件に一致しないため表示されません。

「osaka_aut」テーブルは「empno」が「A001」「A002」のみなので、この2レコードのみ表示されます。「A090」は結合条件に一致しないため表示されません。

外部結合はLEFT JOINとRIGHT JOINがありますが、通常はLEFT JOINを使うのが一般的なのでRIGHT JOINの例はここでは省略します。

以上、SQL ServerのJOIN(LEFT JOIN,RIGHT JOIN)の使い方でした。

 

INNER JOIN(内部結合)についてはこちらを参照してください。

 

コメント