SQL Server FULL OUTER JOIN(完全外部結合)
SQLの「JOIN」について解説します。SQL Serverの「JOIN」は複数のテーブルを条件をつけて結合します。
大きくわけるとJOIN(結合)は2種類あります。
- 内部結合(INNER JOIN)
- 外部結合(OUTER JOIN)・・・LEFT OUTER JOIN、RIGHT OUTER JOIN、FULL OUTER JOIN
今回は、外部結合の1種類、FULL OUTER JOIN(完全外部結合)について解説します。
参照:外部結合の使用 – TechNet – Microsoft
FULL JOIN とは
「結合」は複数のテーブルをひっつけるという意味です。複数のテーブルを結合して、1つの結果にまとめたいときに使います。
LEFT OUTER JOIN(左外部結合)、RIGHT OUTER JOIN(右外部結合)のようにどちらかのテーブルを優先はしません。
SQLでは「FULL OUTER JOIN」は「FULL JOIN」と書いてもOKです。こちらの方が速くコードを書けます。
この図では「AテーブルとBテーブルの結合条件が一致したレコード」と「Aテーブルだけにあるレコード」と「Bテーブルだけにあるレコード」を取得します。(赤塗部分)
FULL JOINの使い方
SQL Serverで完全外部結合するには、FULL JOIN句の前後に結合するテーブルを記述します。テーブル名の後にスペースを入れて別名を指定します。
「ON」は結合する列を指定します。列はテーブル名の別名を必ずつけておきます。
--完全外部結合 JOINを使用 SELECT {列} FROM {Aテーブル} a (FULL) JOIN {Bテーブル} b ON {a.列1}={b.列2} WHERE 条件;
完全外部結合は複数のテーブルを結合し、一致したレコードと一致しないレコードも取得します。上記の例、{Aテーブル}と{Bテーブル}をFULL JOINで結合し、一致したレコードだけでなく一致しないレコードも取得します。
SQLでは「FULL」は省略可能なので、ここでは省略しています。
サンプルデータ
emp
empno | empname |
A001 | 佐藤花子 |
A002 | 田中太郎 |
A003 | 加藤一 |
A004 | 青木花 |
A005 | 藤田学 |
tokyo_aut
empno |
A001 |
A010 |
例1. FULL JOINで結合する
--FULL JOIN SELECT e.empno, e.empname, t.empno tokyo FROM emp e JOIN tokyo_aut t ON e.empno = t.empno WHERE e.empno < 'A100' ;
e.empno | e.empname | tokyo |
A001 | 佐藤花子 | A001 |
A002 | 田中太郎 | |
A003 | 加藤一 | |
A004 | 青木花 | |
A005 | 藤田学 | |
A010 |
「emp」テーブルと「tokyo_aut」テーブルを「FULL JOIN」で完全外部結合しました。
「emp」テーブルにしか存在しないレコード、「tokyo_aut」テーブルにしか存在しないレコードもふくめて全てSELECTされます。
以上、SQL ServerのFULL JOIN(完全外部結合)の使い方でした。
その他のJOIN(結合)はこちらを参照してください。
コメント