- Home ›
- MySQLの使い方 ›
- テーブルとデータの結合
自然結合を行う(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);
テーブルには次のようなデータを格納してあります。
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 つ目のテーブルは次のように作成しました。部署に関するテーブルで、部署の名前が登録されています。
create table dept (deptid int, deptname varchar(10));
テーブルには次のようなデータを格納してあります。
insert into dept values (1, 'Develop'); insert into dept values (3, 'Legal'); insert into dept values (5, 'Planning'); insert into dept values (6, 'Marketing');
-- --
それでは最初に内部結合を自然結合で行いデータを取得します。
select * from staff natural inner join dept;
次に左外部結合を自然結合で行いデータを取得します。
select * from staff natural left join dept;
最後に右外部結合を自然結合で行いデータを取得します。
select * from staff natural right join dept;
それぞれ結合を行ったあとでデータを取得することができました。
なお内部結合や外部結合では 2 つのテーブルで同じカラム名を結合する時に USING を使用することができますが、 USING は 2 つのテーブルにある同じカラム名の中のどのカラム名を使って結合するのかを指定することができましたが、 NATURAL の場合には 同じ名前のカラム名は自動的にすべて結合されてしまう点が異なります。
-- --
NATURAL を指定して自然結合を行う方法について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。