今回はSQLにおける複数テーブルの結合
について説明していきたいと思います!!複数テーブルの結合を用いることで、複数テーブルに分けて格納したデータを同時に取り出す
ことができ、データベースの力を最大化することができます。
過去の関連投稿
「SQLの基礎について学ぶ#01」
「SQLの基礎について学ぶ#02」
「SQLの基礎について学ぶ#03」
「SQLの基礎について学ぶ#04」
「SQLの基礎について学ぶ#05」
「SQLの基礎について学ぶ#06」
「SQLの基礎について学ぶ#07」
「SQLの基礎について学ぶ#08」
1. 複数テーブルへのデータの格納
accountテーブル
date(日付) | name(項目名) | memo(メモ) | price(金額) |
---|---|---|---|
2020-12-03 | 食費 | カフェでランチ | 800 |
2021-01-03 | 交通費 | 地下鉄を使用 | 600 |
2021-05-22 | 食費 | レストランで夕食 | 1000 |
2021-03-14 | 日用品 | トイレットペーパー、洗剤 | 1400 |
このテーブルを以下のように、複数テーブル(今回は2つのテーブル)に分けます!! | |||
⬇⬇⬇ | |||
⬇⬇⬇ |
① new_accountテーブル
date(日付) | name_id(項目名ID) | memo(メモ) | price(金額) |
---|---|---|---|
2020-12-03 | 1 | カフェでランチ | 800 |
2021-01-03 | 2 | 地下鉄を使用 | 600 |
2021-05-22 | 1 | レストランで夕食 | 1000 |
2021-03-14 | 3 | トイレットペーパー、洗剤 | 1400 |
② nameテーブル
id | name(項目名) | remarks(項目名の備考) |
---|---|---|
1 | 食費 | 食事代(交際費に関わる食事代は除く) |
2 | 交通費 | 電車、バス、飛行機等 |
3 | 日用品 | 日常で使用する消耗品 |
new_accountテーブル
では項目名がなくなり、代わりにname_id(項目名ID)
が付与されました。これが何を意味するかというと、分割して新しくできたnameテーブル
のid
に対応します。つまり、項目名ID
には、nameテーブル
のid列
のいずれかが格納されており、「項目名は別テーブルであるnameテーブルを参照して下さい」ということになります。
new_accountテーブル
で、nameテーブル
のid
を指定することによって、nameテーブル
のどの行を指しているのか明確に指定することができます。
今回のnew_accountテーブル
とnameテーブル
のように、ある2つのテーブルの行に情報として関連性がある場合、その関連性をリレーションシップ
と呼びます。またnew_accountテーブル
のname_id
のように、他のテーブルの関連する行を指定するための値を格納することで、リレーションシップの役割を担う列のことを外部キー
と呼びます。
2. 複数テーブルに分けるメリット
accountテーブルから複数テーブルであるnew_accountテーブル
で、nameテーブル
に分けたことで、人間にとっては見づらく、不便になったように感じます。
しかし、コンピューターにとっては、このように複数テーブルに分割されていたほうが、データを安全
、確実
、高速
にデータを取り扱えるというメリットがあります。
また、内容に重複が多く分かりにくい表になってしまうことを防ぐメリットもあります。例えば、nameテーブル
のremarksでは項目名に対しての備考が記載されています。もし、new_accoutテーブル
とnameテーブル
を1つにまとめると以下のようになります。
date(日付) | name(項目名) | remarks(項目名の備考) | memo(メモ) | price(金額) |
---|---|---|---|---|
2020-12-03 | 食費 | 食事代(交際費に関わる食事代は除く) | カフェでランチ | 800 |
2021-01-03 | 交通費 | 電車、バス、飛行機等 | 地下鉄を使用 | 600 |
2021-05-22 | 食費 | 食事代(交際費に関わる食事代は除く) | レストランで夕食 | 1000 |
2021-03-14 | 日用品 | 日常で使用する消耗品 | トイレットペーパー、洗剤 | 1400 |
このように、項目名が食費である行の備考が重複してしまいます。この表では、そこまで気にならないかもしれませんが。膨大なデータになると同じ備考が繰り返し記載
されることになり、見づらい表
になってしまします。1つのテーブルに様々な情報を盛り込むことは、データ管理を難しく
してしまいます。
3. リレーショナルデータベース
複数テーブルを利用するこにはメリットがありますが、このままでは、人間が見づらいテーブルの構成になってしまいます。これを改善するために、私達が普段利用する多くのデータベース製品には、管理に適した構成の複数のテーブルを結合して、人間が理解しやすい構成の表を得る
機能を有しています。このようなデータベースを特にリレーショナルデータベース
と呼び、その機能の中枢を担うDBMSをRDBMS
と呼びます。
3. まとめ
① ある2つのテーブルの行に情報として関連性がある場合、その関連性をリレーションシップ
と呼ぶ。
② リレーションシップの役割を担う列のことを外部キー
と呼ぶ。
③ データを複数テーブルに分けることで、データを安全
、確実
、高速
に取り扱うことができる。
④ RDBは、データを複数テーブル
で安全
、確実
に管理する。
⑤ RDBは、必要に応じてデータを結合
して、人間が理解できる表を作成する。
今回は以上になります。次回はどのようにデータを結合
するのかを学習していきたいと思います。また何か間違い等ありましたら、コメントお願いします。