広告

【MySQL】リレーションを設定する方法(phpMyAdmin)

2019年9月8日

MySQL(phpMyAdmin)でテーブルのリレーションを設定する方法っす

SQL文のテーブルをリレーションするGIF

テーブルと別のテーブルを外部キーで紐付けて、SQL文を使ってより詳細な情報を抽出することができます。

MySQLにリレーションを設定する鍵は外部キーの設定

買い出しリストに担当者を入れたテーブルを作成し、後で連絡ができるように名簿テーブルと関連させることを想定しました。

例として、以下2つのテーブルを準備。

名簿テーブル

名簿テーブル

買い出し担当テーブル

買い出し担当テーブル

以上2つのテーブルを、外部キーを使って関連付けしてみます。

STEP1. 各テーブルを紐付けするための外部キーを挿入

まず最初に、2つのテーブルを紐付けするための外部キーを作成します。

外部キーとは?
説明や補足外部キー(FOREIGN KEY)とは、テーブル間を紐付けるために設定する列のこと。テーブル間のデータの整合を行うキーとなる。

1. 外部キーを挿入するテーブルを選択

外部キーを設定するために、買い出し担当のテーブルを選択

買い出し担当のテーブルを選択

※ カラムを追加する手順は以下記事も詳しいです↓

MySQLでカラム追加・削除をする方法(phpMyAdmin)

詳細記事
mysql-column-add-delete
MySQLでカラム追加・削除をする方法(phpMyAdmin)

MySQLでテーブルを作成したあとに後からカラムを追加・削除する方法です。 補足 先にid自動連番を設定(Auto_in ...

続きを見る

2. 構造タブから1列を挿入し実行

構造タブをクリックして

構造タブをクリック

1列をpersonの後に追加します。

1列を挿入する

3. カラムの名前とデータ型を定義して保存

名前をcharge_id・データ型はINTにて保存します。

名前とデータ型を定義

買い出し担当のテーブルに、担当者のid(charge_id)が挿入されました↓

ALTER TABLE `買い出し担当` ADD `charge_id` INT NOT NULL AFTER `Person`;

買い出し担当テーブルにcharge_idが挿入された

STEP2. 紐付けたいキーを一致させる

次に名簿テーブルのidと買い出し担当のcharge_idを一致させます。

名簿テーブルだと佐藤くんのidは1なので、

名簿テーブルの佐藤くんのid

買い出し担当の佐藤くんの「charge_id」も1へ変更します。

買い出し担当テーブルの佐藤くんidを変更

これを4人分繰り返して、4人とも完了すると以下のとおりっす↓

idとcharge_idの値を統一

注意!
ここで外部キーが一致できてないと、テーブル間での整合性がなくなり狙ったデータの抽出ができなくなります!

STEP3. SQL文書いてテーブルを関連付け

SQL文を使って、テーブル同士がリレーションできたか確認してみます。

例として

  • 名簿テーブルは、テーブル①
  • 買い出し担当テーブルは、テーブル②

と仮定すると、以下のような構文でリレーションを確認できます↓

SELECT * FROM テーブル①.テーブル② WHERE テーブル①.id=テーブル②.charge_id;

1. 買い出し担当のテーブルを選択

SQL文を記入する対象のテーブルを選択します。

charge_idを挿入した買い出し担当のテーブルを選択

買い出し担当のテーブルを選択

2. SQLタブをクリックして以下SQL文を入力。

SQL文を記入するためにSQLタブを選択

SQLタブを選択

以下SQLを記入して実行↓

SELECT * FROM 名簿,買い出し担当 WHERE 名簿.id=買い出し担当.charge_id
補足
名簿のidに紐付けた、charge_id(レコード)を表示する指示です。

成功すれば、以下のように2つのテーブルがリレーション設定され、1つのテーブルとして表示されます

テーブルがリレーションで設定された

以上、2つのテーブルのリレーションの設定方法でした!

まとめ

MySQLでテーブルを使ってリレーションを設定する方法、なかなか理解してないと説明が難しいっすね。

自分で書いてて訳わかんなくて気持ち悪くなってきました。(ゲロゲロ)

OYAKUN
OYAKUN
記事にまとめながら整理できた感じです(泣)次回はテーブルの集計結果を求めていきます!
次回記事
MySQL-group-by
【MySQL】GROUP BYで商品ごとの合計を算出する(phpMyAdmin)

MySQLにてGROUP BYを使って、テーブルにある商品ごとの合計を算出します。 補足 前回のMySQLでリレーション ...

続きを見る

関連記事:WordPressでアイキャッチが設定できない原因は表示オプションの漏れ
関連記事:【MySQL】DATETIME型でデータの更新日を自動表示する手順(phpMyAdmin)
関連記事:【MySQL】ORDER BY句でデータの並び替えを行う方法