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」は結合条件に一致しないため表示されません。
以上、SQL ServerのJOIN(LEFT JOIN,RIGHT JOIN)の使い方でした。
INNER JOIN(内部結合)についてはこちらを参照してください。
コメント