自然結合

ORACLE

本記事では、結合の一種である自然結合ついて解説します。

※当ページにおいて、検索結果イメージの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結合で使用される列は修飾子を持てません。

まとめ

テーブル同士を結合の分類である自然結合について見てきました。

結合するテーブル同士で同一名称の項目で等価結合を行い、出力する際に同一名称の項目を一つのみにするという自然結合は、普段意識せずに使っていることが多いはずです。

そのため理解しやすいと思います。
関連




タイトルとURLをコピーしました