2017/12/07
本記事では、結合の一種である自然結合ついて解説します。
※当ページにおいて、検索結果イメージのNULLは【NULL】と表現しています。
sponsored link
自然結合とは
自然結合とは、結合するテーブル同士で同一名称の項目で等価結合を行い、出力する際に同一名称の項目を一つのみにする結合です。
等価結合の中の一種ですね。
自然結合(内部結合)
自然結合の中でも内部結合した場合の使い方は以下になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
-- テーブル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 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
-- テーブル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)で記述する場合でも、通常の等価結合の記述であらわす事がほとんどです。
1 2 3 4 5 6 7 |
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)になるので、注意が必要です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
-- 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結合で使用される列は修飾子を持てません。 |
まとめ
テーブル同士を結合の分類である自然結合について見てきました。
結合するテーブル同士で同一名称の項目で等価結合を行い、出力する際に同一名称の項目を一つのみにするという自然結合は、普段意識せずに使っていることが多いはずです。
そのため理解しやすいと思います。
関連