自然結合

広告

外部結合ではONやUSINGの後にどのようにテーブルを結合するのかを指定していましたが、自然結合では2つのテーブルで同じカラム名が含まれる場合、自動的にそのカラムを使って結合が行われます。基本となる構文は次の2つが用意されています。

SELECT table_name.col_name, ... FROM tbl_name1
  NATURAL LEFT JOIN tbl_name2;
SELECT table_name.col_name, ... FROM tbl_name1
  NATURAL RIGHT JOIN tbl_name2;

どのカラムで結合するのかを指定する必要がない反面、それぞれのテーブルで同じカラムが含まれていた場合は自動的に結合のカラムとして扱われてしまいますので注意が必要です。

なお外部結合においてUSINGを使用した場合と同じく、結合後のデータには結合に使われたカラムは一つしか含まれません。

テーブルの結合

具体的な例で見てみます。次のような2つのテーブルを用意しました。(今までサンプルで使っていたテーブルのカラム名を変更しています)。

goods :

codeidgoodsname
B0011旅行に行こう
D0012地球の歴史
F0013栗きんとん
D0022宇宙旅行
F0023ロールケーキ
D0032七人の勇者
B0021三国志
S0015表計算ソフト
B0031趣味と実益

cate :

idcatename
1和書
2DVD
3食品
4家電

自然結合を行うには、例えば次のように指定します。

SELECT * FROM goods NATURAL LEFT JOIN cate;

上記の場合、「goods」テーブルと「cate」テーブルの両方に存在するカラムは「id」カラムだけですので「id」カラムを使って結合が行われます。

結合後のデータがどのように取得されるのかは外部結合の場合と同じです。詳しくは「外部結合(LEFT JOIN句, RIGHT JOIN句)」を参照して下さい。

先ほどのSQL文を実行すると次のようなデータを取得します。

idcodegoodsnamecatename
1B001旅行に行こう和書
2D001地球の歴史DVD
3F001栗きんとん食品
2D002宇宙旅行DVD
3F002ロールケーキ食品
2D003七人の勇者DVD
1B002三国志和書
5S001表計算ソフトNULL
1B003趣味と実益和書

結合に使われたカラムが先頭に表示されます。この時、同じカラムは一度しか現れません。その後にそれぞれのテーブルの残りのカラムが表示されます。これはUSINGの場合と同じです。

サンプル

実際に試してみます。まず次のようなテーブルを作成します。

mysql> create table goods (code varchar(5), id int, goodsname varchar(10));
mysql> create table cate (id int, catename varchar(10));

テーブルには次のようなデータを追加してあります。

p16-1

p16-2

「goods」テーブルと「cate」テーブルを自然結合(左外部結合)します。2つのテーブルで共通のカラムは「id」カラムです。

mysql> select * from goods natural left join cate;

p16-3

今度は自然結合(右外部結合)してデータを取得します。

mysql> select * from goods natural right join cate;

p16-4

( Written by Tatsuo Ikura )