SQL Server FULL JOINとは(完全外部結合)

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つの結果にまとめたいときに使います。

FULL OUTER JOIN(完全外部結合 )は、両方のテーブルのどちらも優先で、結合条件で一致するレコードも一致しないレコードもすべて取得します

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

 

 

コメント