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

広告

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

自然結合を行う場合の書式は次の通りです。

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

上が内部結合の場合で下が外部結合の場合です。

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

それでは簡単な例を使ってどのように使用するのかについて確認します。社員の一覧が登録された「staff」テーブルと、部署が登録された「dept」テーブルを用意しました。

create table staff(id integer, staffname text, deptid integer);
create table dept(deptid integer, deptname text);

p4-1

2つのテーブルには共通して「deptid」カラムがありますので、自然結合を行った場合にはこのカラムの値が結合条件として自動的に使用されます。

staffテーブルには次のようなデータが入っています。

p4-2

deptテーブルには次のようなデータが入っています。

p4-3

それではまずNATURALキーワードを付けた内部結合を行いデータを取得してみます。

select * from staff nature inner join dept;

p4-4

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

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

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

p4-5

----

続いてNATURALキーワードを付けた外部結合を行いデータを取得してみます。

select * from staff natural left outer join dept;

p4-6

今回も次のように外部結合でON句を使ってデータを取得した場合と同じです。

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

p4-7

内部結合と外部結合でそれぞれNATURALを付けた場合を試してみました。複数のテーブルで同じカラム名がありそのカラム名で結合を行いたい場合には便利ですが、カラム名が違っていたり複数のカラムの名前が同じだったりした場合には利用できませんので実際にはどの程度利用する機会があるのかは分かりません。

SQLite入門の他の記事を見てみる

( Written by Tatsuo Ikura )