等結合は、結合に用いたカラムが2つずつ表示されており冗長です。これを排除したものが『自然結合』です。
自然結合には、NATURAL JOIN句を用います。
構文
SELECT カラム FROM テーブル1 NATURAL JOIN テーブル2
NATURAL JOIN句では、自動的に結合する2つのテーブルの同名のカラムの値が等しい組み合わせを取り出します。
従ってON句による条件の記述は行いません。
例:【subject_list】と【teacher_list】の自然結合
SELECT * FROM subject_list NATURAL JOIN teacher_list;
内部結合のものと似ていますが、teacher_idカラムが1つしかないことが判ります。
NATURAL JOIN句を用いた結合は簡潔に記述できるのですが、結合したいテーブル間で
・結合に使うカラムが同名であること
・結合に使うカラム以外に同名のカラムがないこと
を満たしていないと結合できないという欠点があります。
同じ結果をWHERE句の利用およびSELECT句の表示カラムリストを用いて得ることも出来ます。
こちらの書式では結合条件を明記するため、記述は長くなるもののNATURAL JOIN句のような欠点はありませんので、こちらの書式が使われることも少なくありません。
例:【subject_list】と【teacher_list】の自然結合をWHERE句を用いて記述
SELECT subject_list.*, teacher_name, ex_number
FROM subject_list, teacher_list
WHERE subject_list.teacher_id=teacher_list.teacher_id ;表示するカラムを指定するとき、あるテーブルのカラムをすべて表示するならば
テーブル名.*と記述します。
カラムを個別に指定する場合、他のテーブルに同名のカラムがない場合はカラム名のみを記述できます。他のテーブルに同名のカラムがある場合は
テーブル名.カラム名と記述します。
結果

この場合も、直積結合から結合条件を満たしたものを取り出し、カラム表示の冗長部分を排除するという手順です。
3つ以上のテーブルを自然結合する場合
基本的な考え方は内部結合の時と同じです。
例:【registration_list】と【subject_list】と【student_list】の自然結合
SELECT * FROM registration_list
NATURAL JOIN subject_list
NATURAL JOIN student_list;結果

WHERE句で記述することもできます。
SELECT registration_list.*,
subject_name, teacher_id, student_name
FROM registration_list, subject_list, student_list
WHERE registration_list.subject_id=subject_list.subject_id AND
registration_list.student_id=student_list.student_id;これはNATURAL JOIN句を利用したものとまったく同じ結果を得ることが出来ます。
例:【registration_list】と【subject_list】と【student_list】と【teacher_list】の自然結合
SELECT * FROM registration_list
NATURAL JOIN subject_list
NATURAL JOIN student_list
NATURAL JOIN teacher_list;結果

WHERE句を使って記述するとこうなります。
SELECT registration_list.subject_id, subject_name,
teacher_list.teacher_id, teacher_name, ex_number,
student_list.student_id, student_name
FROM registration_list,subject_list,student_list,teacher_list
WHERE registration_list.student_id=student_list.student_id AND
registration_list.subject_id=subject_list.subject_id AND
subject_list.teacher_id=teacher_list.teacher_id;結果



コメント