自然結合を行う(NATURAL)

内部結合や外部結合を行うときに、 結合条件としてそれぞれのテーブルで同じ名前のカラムを結合する場合に NATURAL を指定することで結合条件を省略することができます。このような結合を自然結合といいます。ここでは MySQL で NATURAL を指定して結合条件を記述せずに内部結合や外部結合を行う方法について解説します。

(Last modified: )

自然結合の使い方

内部結合や外部結合を行うときに、結合条件としてそれぞれのテーブルの同じ名前のカラムを結合する場合、 NATURAL を付けることで結合条件を省略することができます。次のように使います。

内部結合の場合:

SELECT table_name.col_name1 [, table_name.col_name2 ...]
  FROM table_name1
  NATURAL INNER JOIN tbl_name2

左外部結合の場合:

SELECT table_name.col_name1 [, table_name.col_name2 ...]
  FROM table_name1
  NATURAL LEFT JOIN tbl_name2

右外部結合の場合:

SELECT table_name.col_name1 [, table_name.col_name2 ...]
  FROM table_name1
  NATURAL RIGHT JOIN tbl_name2

2 つのテーブルで同じカラム名を自動的に結合するので結合条件を記述する必要がないのですが、同じカラム名のものはすべて自動的に結合されてしまうので注意が必要です。

-- --

それでは実際に試してみます。 2 つのテーブルを作成します。 1 つ目のテーブルは次のように作成しました。社員に関するテーブルで、社員の名前と部署IDが登録されています。

create table staff (id int, staffname varchar(10), deptid int);

自然結合の使い方(1)

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

insert into staff values (1, 'Yamada', 1);
insert into staff values (2, 'Honda', 4);
insert into staff values (3, 'Kudou', 6);
insert into staff values (4, 'Nishi', 1);
insert into staff values (5, 'Tagawa', 3);

自然結合の使い方(2)

2 つ目のテーブルは次のように作成しました。部署に関するテーブルで、部署の名前が登録されています。

create table dept (deptid int, deptname varchar(10));

自然結合の使い方(3)

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

insert into dept values (1, 'Develop'); insert into dept values (3, 'Legal'); insert into dept values (5, 'Planning'); insert into dept values (6, 'Marketing');

自然結合の使い方(4)

-- --

それでは最初に内部結合を自然結合で行いデータを取得します。

select * from staff natural inner join dept;

自然結合の使い方(5)

次に左外部結合を自然結合で行いデータを取得します。

select * from staff natural left join dept;

自然結合の使い方(6)

最後に右外部結合を自然結合で行いデータを取得します。

select * from staff natural right join dept;

自然結合の使い方(7)

それぞれ結合を行ったあとでデータを取得することができました。

なお内部結合や外部結合では 2 つのテーブルで同じカラム名を結合する時に USING を使用することができますが、 USING は 2 つのテーブルにある同じカラム名の中のどのカラム名を使って結合するのかを指定することができましたが、 NATURAL の場合には 同じ名前のカラム名は自動的にすべて結合されてしまう点が異なります。

-- --

NATURAL を指定して自然結合を行う方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。