内部結合(等結合)


複数の関連づけたテーブルから、条件を満たした組み合わせのみを取り出す結合を『内部結合』といいます。

内部結合を行うには、SELECT構文の中でINNER JOIN句を使います。

構文

SELECT カラム FROM テーブル1 INNER JOIN テーブル2 ON 結合条件

結合条件には様々な条件を記述できますが、最も多いのは外部キーについて

『参照する側のキー=参照される側の列』

とするものでしょう。
ではやってみましょう。

例:【subject_list】と【teacher_list】の内部結合
SQL
SELECT * FROM subject_list
INNER JOIN teacher_list ON subject_list.teacher_id = teacher_list.teacher_id;

1つのSELECT文の中で複数のテーブルを使う場合、カラム名の指定は

テーブル名.カラム名

と記述します。

結果

このように、『テーブル1のある列とテーブル2のある列が等しい』ことを条件とするものを、特に『等結合』と呼びます。

内部結合は、WHERE句を用いて記述することもできます。

例:【subject_list】と【teacher_list】の内部結合をWHERE句で記述する
SQL
SELECT * FROM subject_list, teacher_list
WHERE subject_list.teacher_id = teacher_list.teacher_id;

これでもまったく同じ結果が得られます。
WHERE句を使った場合は、まず直積結合をもとめ、そこから対応するカラムの値が等しいものを取り出しています。

3つ以上のテーブルを内部結合する場合
3つ以上のテーブルを内部結合する場合は、INNER JOIN句を必要な数だけ記述します。

例:【registration_list】と【subject_list】と【student_list】の内部結合
SQL
SELECT * FROM registration_list
INNER JOIN subject_list ON registration_list.subject_id = subject_list.subject_id
INNER JOIN student_list ON registration_list.student_id = student_list.student_id;
結果

WHERE句で記述することもできます。

SQL
SELECT * 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;

これはINNER JOIN句を利用したものとまったく同じ結果を得ることが出来ます。

練習

【sales】と【sales_detail】と【item_list】の等結合を求めるSQLを記述しなさい。

コメント

タイトルとURLをコピーしました