自然結合

内部結合や外部結合ではそれぞれのテーブルのカラムを指定し、同じ値が格納されているデータを結合しました。結合を行う場合にNATURALを付けると、それぞれのテーブルの同じカラム名の値が一致しているかどうかを比較します。基本となる構文は次の通りです。

SELECT テーブル名.カラム名, ... FROM テーブル名1
 NATURAL INNER JOIN テーブル名2;
SELECT テーブル名.カラム名, ... FROM テーブル名1
 NATURAL LEFT OUTER JOIN テーブル名2;

内部結合と外部結合のどちらでも指定することが可能です。自然結合にした場合、両方のテーブルに含まれている同じカラム名の値が一致しているかどうか比較されるためON以降は指定する必要がありません。比較されるカラム名が自動的に決まる以外は内部結合及び外部結合の場合と同じです。

テーブルの結合

具体的な例で見てみます。次のような2つのテーブルを用意しました。

goods :

cateidgoodsname
11Q84
2ドロップ
1植物図鑑
4抹茶ロール
2ポニョ
1武士道
5ワープロ
4栗きんとん

cate :

cateidcatename
1和書
2DVD
3スポーツ
4食品

次のようにNATURAL付きの内部結合を行います。

select * from goods natural inner join cate;

「goods」テーブルと「cate」テーブルの両方のテーブルに存在するカラム名は「cateid」カラムだけですので、「cateid」カラムの値が一致するかどうかを見て結合したデータを取得します。

cateidgoodsnamecatename
11Q84和書
2ドロップDVD
1植物図鑑和書
4抹茶ロール食品
2ポニョDVD
1武士道和書
4栗きんとん食品

全てのカラムの値を取得した場合でも、比較対象となった2つのテーブルで名前が同じカラムの値は一つしか取得されません。またカラムを指定してデータを取得する場合、他のカラムについてはそれぞれのテーブルでカラム名が重複していないことになりますので、テーブル名を付けずカラム名だけを指定するだけで構いません。

サンプル

では実際に試してみます。

次のようなテーブルを対象とします。

p4-1

p4-2

NATURAL付きの内部結合でデータを取得します。

select * from goods natural inner join cate;

p4-3

続いてNATURAL付きの外部結合でデータを取得します。

select * from goods natural left outer join cate;

p4-4