こんにちは。fsです。
データベースは、
・複数で共有、利用すること
・検索、加工すること
を目的に使います。
データを入れた後に複数のテーブルを関連付けて
- 効率よく
- 重複なく
- 見やすく
して管理しやすくしていくというのは、よくある作業です。
というわけで今回は、MySQLを使って複数のテーブルを関連付けていきたいと思います。
複数のテーブルを関連づける
まず、商品というテーブルをつくったとします。
![](https://i0.wp.com/fsfuyuto.com/wp-content/uploads/2022/01/bee4051ae63a6452bd00e3ff06c83e92.png?resize=1024%2C339&ssl=1)
- id
- カテゴリー
- 商品名
- 価格
の情報を管理していますが、これを見るとちょっと問題があります。
カテゴリーのカラムで情報が重複してしまっていて、データ量に無駄が発生してしまうからです。
カテゴリーを別で管理
解決方法としては、カテゴリーを別のテーブルで管理した方が良さそうです。
早速、カテゴリーのテーブルをつくります。
select * from 商品;
create table カテゴリー (
id int primary key auto_increment,
カテゴリ名ー varchar(50)
);
次にデータを入れていきます。
Workbenchにはデータエディター機能がついているのでそれを使っていきましょう。
テーブルを選択して、右端のエディターアイコンをクリックします。
![](https://i0.wp.com/fsfuyuto.com/wp-content/uploads/2022/01/641bfc6fd7dd73cca15a2e62edbd169a.png?resize=436%2C588&ssl=1)
次に画面右のForm Editorをクリックします。
そこでidとカテゴリー名を記載できるので、項目を入れていきます。
![](https://i0.wp.com/fsfuyuto.com/wp-content/uploads/2022/01/92128de792c9dff601674766fb66f331.png?resize=1024%2C388&ssl=1)
項目を入れたら、右下のApplyをクリックします。
![](https://i0.wp.com/fsfuyuto.com/wp-content/uploads/2022/01/416b1924fa08becd170064dbd8ac056f.png?resize=1024%2C419&ssl=1)
するとポップアップ画面が出てくるので、それもApplyをクリックします。
![](https://i0.wp.com/fsfuyuto.com/wp-content/uploads/2022/01/a06442c27ca30adac1cd3ae7801db483.png?resize=1024%2C735&ssl=1)
これでデータが入りました。
同じ要領で、バッグ、グッズと入れていきます。
データを確認すると、ちゃんと入っていることがわかります。
![](https://i0.wp.com/fsfuyuto.com/wp-content/uploads/2022/01/59bc201559852d6b82293a89da43d77f.png?resize=1024%2C184&ssl=1)
これで商品のジャンルはカテゴリーテーブルで管理できるようになりました。
続いて商品テーブルのカテゴリーカラムを番号に置き換えましょう。
select * from 商品;
update 商品 set カテゴリー=1 where カテゴリー="洋服";
update 商品 set カテゴリー=2 where カテゴリー="バッグ";
update 商品 set カテゴリー=3 where カテゴリー="グッズ";
ちなみにWorkbenchの初期設定では、セーフモードがかかっており、それを解除しないとカラムの変更ができません。
その場合はpreferenceを開き、セーフモードのチェックモードを外して、再接続すればOKです。
![](https://i0.wp.com/fsfuyuto.com/wp-content/uploads/2022/01/bf540e60636c6db711c38be851eda9f1.jpg?resize=1024%2C776&ssl=1)
![](https://i0.wp.com/fsfuyuto.com/wp-content/uploads/2022/01/4f4b59c4462d166f1147def53472d4d9.png?resize=1024%2C378&ssl=1)
これでデータを読み込むと、変更されていることがわかります。
![](https://i0.wp.com/fsfuyuto.com/wp-content/uploads/2022/01/73b00911b46634b26b9b5a432a8e36cd.png?resize=1024%2C342&ssl=1)
続いて、カテゴリーのデータ型も文字列から整数に変えていきましょう。
alter table 商品 modify カテゴリー int;
desc 商品;
descでテーブルを見てみると、ちゃんと変更されていることがわかります。
![](https://i0.wp.com/fsfuyuto.com/wp-content/uploads/2022/01/15cddd4fb2f03a198291aa32780f419d.png?resize=812%2C250&ssl=1)
カラムをつなぐ
これで、商品カテゴリーを数字で管理できるようになりました。
ですが、このままだと商品がどのジャンルに属するか、テーブルを切り替えないとわからないのでちょっと不便です。
そこで、SQLを使ってテーブル同士をくっつけ、わかりやすく見られるようにしていきます。
今回はinner joinというコマンドを使います。
まず、selectで元のテーブル名を選びます。
次にinner joinの後に結びつけるカラムを選択肢、onの後にそれぞれのテーブル名.カラム名をイコールで繋ぎます。
select * from 商品
inner join カテゴリー
on 商品.カテゴリー = カテゴリー.id;
これをやることで、各商品に関連したカテゴリーが横に表示されました。
![](https://i0.wp.com/fsfuyuto.com/wp-content/uploads/2022/01/2fcf918038fd935bd37284a5e0dadbd7.png?resize=906%2C414&ssl=1)
これがリレーション(複数のテーブルで情報を管理するやり方)と言われるものです。
情報を見やすく整理するのに必須の手法となります。
まとめ
いかがだったでしょうか。
今回は、MySQLを使い、複数のテーブルを関連づけて一元管理する方法を紹介していきました。
このリレーションはウェブアプリケーションなどちょっと複雑なプログラムをつくる際に必須となる知識です。
少しずつ触れながら、データベースの操作に慣れていきましょう!
今回は以上です。
最後までお読みいただきありがとうございました。
fsも愛用中!UdemyでMySQLを学ぼう!!
コメント