自然結合
内部結合や外部結合ではそれぞれのテーブルのカラムを指定し、同じ値が格納されているデータを結合しました。結合を行う場合にNATURALを付けると、それぞれのテーブルの同じカラム名の値が一致しているかどうかを比較します。基本となる構文は次の通りです。
SELECT テーブル名.カラム名, ... FROM テーブル名1 NATURAL INNER JOIN テーブル名2;
SELECT テーブル名.カラム名, ... FROM テーブル名1 NATURAL LEFT OUTER JOIN テーブル名2;
内部結合と外部結合のどちらでも指定することが可能です。自然結合にした場合、両方のテーブルに含まれている同じカラム名の値が一致しているかどうか比較されるためON以降は指定する必要がありません。比較されるカラム名が自動的に決まる以外は内部結合及び外部結合の場合と同じです。
テーブルの結合
具体的な例で見てみます。次のような2つのテーブルを用意しました。
goods :
| cateid | goodsname |
|---|---|
| 1 | 1Q84 |
| 2 | ドロップ |
| 1 | 植物図鑑 |
| 4 | 抹茶ロール |
| 2 | ポニョ |
| 1 | 武士道 |
| 5 | ワープロ |
| 4 | 栗きんとん |
cate :
| cateid | catename |
|---|---|
| 1 | 和書 |
| 2 | DVD |
| 3 | スポーツ |
| 4 | 食品 |
次のようにNATURAL付きの内部結合を行います。
select * from goods natural inner join cate;
「goods」テーブルと「cate」テーブルの両方のテーブルに存在するカラム名は「cateid」カラムだけですので、「cateid」カラムの値が一致するかどうかを見て結合したデータを取得します。
| cateid | goodsname | catename |
|---|---|---|
| 1 | 1Q84 | 和書 |
| 2 | ドロップ | DVD |
| 1 | 植物図鑑 | 和書 |
| 4 | 抹茶ロール | 食品 |
| 2 | ポニョ | DVD |
| 1 | 武士道 | 和書 |
| 4 | 栗きんとん | 食品 |
全てのカラムの値を取得した場合でも、比較対象となった2つのテーブルで名前が同じカラムの値は一つしか取得されません。またカラムを指定してデータを取得する場合、他のカラムについてはそれぞれのテーブルでカラム名が重複していないことになりますので、テーブル名を付けずカラム名だけを指定するだけで構いません。
サンプル
では実際に試してみます。
次のようなテーブルを対象とします。
NATURAL付きの内部結合でデータを取得します。
select * from goods natural inner join cate;
続いてNATURAL付きの外部結合でデータを取得します。
select * from goods natural left outer join cate;