本記事では、結合の一種である自然結合ついて解説します。
※当ページにおいて、検索結果イメージのNULLは【NULL】と表現しています。
自然結合とは
自然結合とは、結合するテーブル同士で同一名称の項目で等価結合を行い、出力する際に同一名称の項目を一つのみにする結合です。
等価結合の中の一種ですね。
自然結合(内部結合)
自然結合の中でも内部結合した場合の使い方は以下になります。
-- テーブル1
A B
--- -
001 a
002 b
-- テーブル2
A C
--- -
001 z
003 w
-- 自然結合(ORACLE仕様・一般的な記述)
SELECT t1.a
,t1.b
,t2.c
FROM test_table1 t1
,test_table2 t2
WHERE t1.a = t2.a
;
A B C
--- - -
001 a z
-- 自然結合(標準SQL規格(SQL99))
SELECT *
FROM test_table1 t1
NATURAL JOIN test_table2 t2
;
A B C
--- - -
001 a z
自然結合(外部結合)
自然結合の中でも外部結合した場合の使い方は以下になります。
-- テーブル1
A B
--- -
001 a
002 b
-- テーブル2
A C
--- -
001 z
003 w
-- 自然結合(ORACLE仕様・一般的な記述)
SELECT t1.a
,t1.b
,t2.c
FROM test_table1 t1
,test_table2 t2
WHERE t1.a = t2.a(+)
;
A B C
--- - ----
001 a z
002 b NULL
-- 自然結合(標準SQL規格(SQL99))
SELECT *
FROM test_table1 t1
NATURAL LEFT OUTER JOIN test_table2 t2
;
A B C
--- - ----
001 a z
002 b NULL
使い道・使い方
実務では特別意識していなくても、自然と自然結合になっていることが多いと思います。(まさに自然結合ですね)
ですので、自然結合という名前は知らずに使っていることも多いです。
また、標準SQL規格(SQL99)の記述方法を使用することは少ないです。
標準SQL規格(SQL99)で記述する場合でも、通常の等価結合の記述であらわす事がほとんどです。
SELECT t1.a
,t1.b
,t2.c
FROM test_table1 t1
JOIN test_table2 t2
ON t1.a = t2.a
;
NATURAL JOINを使った際の注意
標準SQL規格(SQL99)の記述方法である「NATURAL JOIN」を使う際は、SELECT句にテーブル修飾をつけるとエラー(ORA-25155)になるので、注意が必要です。
-- OK
SELECT a
,b
,c
FROM test_table1 t1
NATURAL JOIN test_table2 t2
;
;
A B C
--- - -
001 a z
-- NG
SELECT t1.a
,t1.b
,t2.c
FROM test_table1 t1
NATURAL JOIN test_table2 t2
;
ORA-25155: NATURAL結合で使用される列は修飾子を持てません。
まとめ
テーブル同士を結合の分類である自然結合について見てきました。
結合するテーブル同士で同一名称の項目で等価結合を行い、出力する際に同一名称の項目を一つのみにするという自然結合は、普段意識せずに使っていることが多いはずです。
そのため理解しやすいと思います。
関連





