本記事では、結合における分類である内部結合と外部結合について解説します。
※当ページにおいて、検索結果イメージのNULLは【NULL】と表現しています。
内部結合
内部結合とは
内部結合とは、結合するテーブル同士で条件が一致するデータのみを抽出する結合です。
基本的な使い方は以下になります。
-- テーブル1
A B
--- -
001 a
002 b
-- テーブル2
C D
--- -
001 z
003 w
-- 内部結合(ORACLE仕様)
SELECT t1.a
,t1.b
,t2.c
,t2.d
FROM test_table1 t1
,test_table2 t2
WHERE t1.a = t2.c
;
A B C D
--- - --- -
001 a 001 z
-- 内部結合(標準SQL規格(SQL99))
SELECT t1.a
,t1.b
,t2.c
,t2.d
FROM test_table1 t1
INNER JOIN test_table2 t2
ON t1.a = t2.c
;
A B C D
--- - --- -
001 a 001 z
標準SQL規格(SQL99)のINNERは省略可能です。
外部結合
外部結合とは
外部結合とは、結合するテーブル同士で条件が一致するデータに加えて、条件が一致しないデータも含めて抽出する結合です。
条件が一致しなかった場合、対象テーブルの列値はNULLとして抽出されます。
外部結合には、左側外部結合・右側外部結合・完全外部結合があります。
左側外部結合
左側外部結合とは、内部結合の結果に加えて、条件が一致しないJOIN句の左側のテーブル(FROMテーブル)のデータを抽出する結合です。
基本的な使い方は以下になります。
-- テーブル1
A B
--- -
001 a
002 b
-- テーブル2
C D
--- -
001 z
003 w
-- 左側外部結合(ORACLE仕様)
SELECT t1.a
,t1.b
,t2.c
,t2.d
FROM test_table1 t1
,test_table2 t2
WHERE t1.a = t2.c(+)
;
A B C D
---- ---- ---- ----
001 a 001 z
002 b NULL NULL
-- 左側外部結合(標準SQL規格(SQL99))
SELECT t1.a
,t1.b
,t2.c
,t2.d
FROM test_table1 t1
LEFT OUTER JOIN test_table2 t2
ON t1.a = t2.c
;
A B C D
---- ---- ---- ----
001 a 001 z
002 b NULL NULL
標準SQL規格(SQL99)のOUTERは省略可能です。
右側外部結合
右側外部結合とは、内部結合の結果に加えて、条件が一致しないJOIN句の右側のテーブル(JOINテーブル)のデータを抽出する結合です。
基本的な使い方は以下になります。
-- テーブル1
A B
--- -
001 a
002 b
-- テーブル2
C D
--- -
001 z
003 w
-- 右側外部結合(ORACLE仕様)
SELECT t1.a
,t1.b
,t2.c
,t2.d
FROM test_table1 t1
,test_table2 t2
WHERE t1.a(+) = t2.c
;
A B C D
---- ---- ---- ----
001 a 001 z
NULL NULL 003 w
-- 右側外部結合(標準SQL規格(SQL99))
SELECT t1.a
,t1.b
,t2.c
,t2.d
FROM test_table1 t1
RIGHT OUTER JOIN test_table2 t2
ON t1.a = t2.c
;
A B C D
---- ---- ---- ----
001 a 001 z
NULL NULL 003 w
標準SQL規格(SQL99)のOUTERは省略可能です。
完全外部結合
完全外部結合とは、内部結合の結果に加えて、条件が一致しないJOIN句の左側のテーブル(FROMテーブル)と右側のテーブル(JOINテーブル)の両方のデータを抽出する結合です。
基本的な使い方は以下になります。
-- テーブル1
A B
--- -
001 a
002 b
-- テーブル2
C D
--- -
001 z
003 w
-- 完全外部結合(標準SQL規格(SQL99))
SELECT t1.a
,t1.b
,t2.c
,t2.d
FROM test_table1 t1
FULL OUTER JOIN test_table2 t2
ON t1.a = t2.c
;
A B C D
---- ---- ---- ----
001 a 001 z
002 b NULL NULL
NULL NULL 003 w
標準SQL規格(SQL99)のOUTERは省略可能です。
まとめ
テーブル同士を結合の分類である内部結合と外部結合について見てきました。
外部結合は、内部結合と比較して理解するのが若干難しいかと思います。
サンプルの表を作成して検証するなどして、しっかりと理解しておきましょう。
関連





