自然結合(NATURALキーワード)

内部結合や外部結合の場合、結合条件で指定したそれぞれのテーブルのカラムを比較してデータを結合していました。 NATURAL キーワードを指定するとカラム名を指定しなくても二つのテーブルで同じ名前のカラム名を使って結合が行われます。このような結合を自然結合といいます。ここでは SQLite で NATURAL キーワードを使った自然結合の使い方について解説します。

(Last modified: )

自然結合の使い方

内部結合や外部結合を行うときに NATURAL キーワードを指定することで自然結合を行うことができます。書式は次の通りです。

内部結合の場合:

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

外部結合の場合

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

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

-- --

それでは簡単な例を使ってどのように使用するのかについて確認します。社員の一覧が登録された staff テーブルと、部署が登録された dept テーブルを用意しました。どちらのテーブルにも deptid という名前のカラムが存在しています。それぞれ INSERT 文を使ってデータを格納してあります。

create table staff(id integer, name text, deptid integer);

insert into staff values(1, 'Suzuki', 1);
insert into staff values(2, 'Endou', 3);
insert into staff values(3, 'Katou', 1);
insert into staff values(4, 'Yamada', 2);
insert into staff values(5, 'Takahashi', 4);
insert into staff values(6, 'Honda', 3);

自然結合の使い方(1)

create table dept(deptid integer, deptname text);

insert into dept values(1, 'Sales');
insert into dept values(2, 'Manage');
insert into dept values(3, 'Dev');

自然結合の使い方(2)

それではまず NATURAL キーワードを付けた内部結合を行いデータを取得してみます。両方のテーブルには deptid という同じ名前のカラムが存在するので、 deptid を使って結合が行われます。

select * from staff natural inner join dept;

自然結合の使い方(3)

NATURAL を使った場合、2つのテーブルで同じ名前のカラムは1つだけ結果に表示されます。

これは内部結合で ON 句を使ってデータを取得した場合と同じです。

select * from staff inner join dept on staff.deptid = dept.deptid;

自然結合の使い方(4)

----

次に NATURAL キーワードを付けた外部結合を行いデータを取得してみます。両方のテーブルには deptid という同じ名前のカラムが存在するので、 deptid を使って結合が行われます。

select * from staff natural left outer join dept;

自然結合の使い方(5)

これは外部結合で ON 句を使ってデータを取得した場合と同じです。

select * from staff left outer join dept on staff.deptid = dept.deptid;

自然結合の使い方(6)

----

NATURAL キーワードを利用して自然結合を行う方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

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