複数のテーブルを結合して表示 (内部結合)
内部結合とは、テーブルを結合する際に、2つのテーブル内のどちらにも存在する値同士を結びつけて結合する方法を、内部結合と呼びます。
内部結合では、両方のテーブルに結合条件を満たすレコードがない場合には、そのレコードは結果から除外されます。
次の[hanbai_list]テーブルのデータを見てみましょう。
このデータだけでは、顧客に関する情報は[kokyaku_no]のみで、顧客がどんな名前で住所がどこで、といったことが一切わかりません。
リレーショナルデータベースでは、関連する情報を別々のテーブルに分けて管理するのでした。
顧客に関するデータは、[kokyaku_master]テーブルに登録されています。
これら2つのテーブルは、「kokyaku_no」という共通の列を持っています。
このキーを使って2つのテーブルを結合させ、必要な情報を取り出します。
次の例を見てください。
[hanbai_list]テーブルの1行目では、 kokyaku_no「C001」を[kokyaku_master]テーブルのkokyaku_no列から探し出して結合し、kokyaku_nameをひもづけて 表示しています。
これで、[hanbai_list]テーブルの各レコードは、顧客名を[kokyaku_master]テーブルから調べることができました。
【書式】2つのテーブルを結合する
SELECT テーブル名.列名1 , テーブル名.列名2 ・・・
FROM テーブル1
(INNER) JOIN 結合するテーブル2
ON テーブル1の列名 = テーブル2の列名;
2つのテーブルを結合するにはINNER JOINを使用します。
INNERは省略することができます。
ON ~に2つのテーブルを結びつけるキーとなる列の条件を指定します。
共通するキーの列がどのテーブルのものかがわかるように、
「テーブル1.結合する列名」=「テーブル2. 結合する列名」
と、テーブル名と列名の間に「.(ドット)」を記述します。
また、表示する列名もテーブルの両方に存在する場合は、どのテーブルの列かがわかるように、「テーブル名.列名」と記述をします。
片方のテーブルにのみ存在する場合は、テーブル名は省略して構いません。
【ヒント】テーブルにエイリアス名を付ける
複数のテーブルを結合する際、「どのテーブルのどの列」と指定をすることを学習しました。
しかし、テーブル名が長かったり、複雑であった場合、何度もテーブル名を指定するのは労力がかかりますし、見づらくなってしまい ます。
そこで、テーブルにエイリアス名をつけ、記述をシンプルにすることができます。
テーブルにエイリアス名を付ければ、「正式なテーブル名.列名」を「エイリアス名.列名」と記述ができるので、エイリアス名をシンプルにしておくことで、指定が簡単になります。
【ヒント】結合キーの列名
内部結合のON句には、「テーブル1.列名 = テーブル2.列名」と記述をしました。
実は、データ型が同じであれば、列名は異なっていても構いません。
USING を使ってシンプルに記述する
内部結合のON句に指定する2つのテーブルのキーが同じ列名である場合は、USINGを使って記述をシンプルにすることができます。
【書式】USING
SELECT テーブル名.列名1 , テーブル名.列名2 ・・・
FROM テーブル1
INNER JOIN 結合するテーブル2
USING(結合する列名);
結合した結果から条件を指定して、さらに抽出
結合したテーブルから、条件に合致したものを表示させるには、WHEREを使います。
条件を設定する列の記述は、どのテーブルの列かを明確にするため「テーブル名.列名」を指定をする必要があります。
【書式】WHEREを使った条件設定
SELECT テーブル名.列名1 , テーブル名.列名2 ・・・
FROM テーブル1
INNER JOIN 結合するテーブル2
ON 結合するテーブル1.列名 = 結合するテーブル2.列名
WHERE 条件;
WHEREによるテーブルの結合
JOINを使わずに、WHEREによる抽出条件の指定でテーブルを結合することができます。
SQL文では、FROM句に複数のテーブル名をカンマで区切って指定することで、直積結合とよばれる結合が行われます。
直積結合ではこの場合、それぞれのテーブル内のレコードが、すべて組み合わさり結果として表示されます。
通常、この直積結合では意味のない結果が表示されますが、この組み合わせの結果からWHERE句でキーの値が同じレコードを抽出することで、内部結合と同じ表示結果を得ることができます。
【ポイント】
JOIN句を使用した結合でもデータベース内部では、直積結合が行われ、ON句による条件でレコードが抽出されています。
【書式】WHEREを使った直積結合
SELECT テーブル名.列名1 , テーブル名.列名2 ・・・
FROM テーブル1 , テーブル2
WHERE テーブル名1. 列名 = テーブル名2. 列名
【ヒント】
並べ替えにはORDER BYを使います。
参考図書
LINE公式アカウント
仕事が辛くてたまらない人生が、仕事が楽しくてたまらない人生に変わります。
【登録いただいた人全員に、無料キャリア相談プレゼント中!】