未来エンジニア養成所Blog

月単価180万以上のプログラミング講師がプログラミングを皆に楽しんでもらうための情報をお届けします。

【DB入門】複数のテーブルを利用する Part2

title


複数のテーブルを結合して表示 (内部結合)

内部結合とは、テーブルを結合する際に、2つのテーブル内のどちらにも存在する値同士を結びつけて結合する方法を、内部結合と呼びます。

内部結合では、両方のテーブルに結合条件を満たすレコードがない場合には、そのレコードは結果から除外されます。

内部結合



次の[hanbai_list]テーブルのデータを見てみましょう。

内部結合SQL1



このデータだけでは、顧客に関する情報は[kokyaku_no]のみで、顧客がどんな名前で住所がどこで、といったことが一切わかりません。

リレーショナルデータベースでは、関連する情報を別々のテーブルに分けて管理するのでした。

顧客に関するデータは、[kokyaku_master]テーブルに登録されています。

内部結合SQL2



これら2つのテーブルは、「kokyaku_no」という共通の列を持っています。

このキーを使って2つのテーブルを結合させ、必要な情報を取り出します。


次の例を見てください。

[hanbai_list]テーブルの1行目では、 kokyaku_no「C001」を[kokyaku_master]テーブルのkokyaku_no列から探し出して結合し、kokyaku_nameをひもづけて 表示しています。

内部結合SQL3



これで、[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句でキーの値が同じレコードを抽出することで、内部結合と同じ表示結果を得ることができます。

WHERE によるテーブルの結合



【ポイント】

JOIN句を使用した結合でもデータベース内部では、直積結合が行われ、ON句による条件でレコードが抽出されています。



【書式】WHEREを使った直積結合

SELECT テーブル名.列名1 , テーブル名.列名2 ・・・
FROM テーブル1 , テーブル2
WHERE テーブル名1. 列名 = テーブル名2. 列名



【ヒント】

並べ替えにはORDER BYを使います。


参考図書



LINE公式アカウント

仕事が辛くてたまらない人生が、仕事が楽しくてたまらない人生に変わります。
【登録いただいた人全員に、無料キャリア相談プレゼント中!】


LineOfficial

友だち追加