🖥

SQLのJOINが分からない? じゃあ逆から考えてみよう (親子関係を例にしたりして)

2023/08/26に公開

親子関係

Alice には二人の子供がいる。
Carol と David だ。

Bob にも二人の子供がいる。
Eric と Frank だ。

これをデータベースの「1個のテーブル」で表すと、こんな感じになるだろう。

Parent Child
Alice Carol
Alice David
Bob Eric
Bob Frank

AliceもBobも行が重複しているが、1個のテーブルで表現しようとすると仕方がないのだ。

分割してみよう

このテーブルを二個に分割したらどうなる?

|Parent|
|:--|:--|
|Alice|
|Bob|

|Child|
|:--|:--|
|Carol|
|David|
|Eric|
|Frank|

やった、データが綺麗になったぞ!

だけどちょっと待てよ。
誰が誰の子供か分からなくなってしまった。

IDを付けてみよう

親にIDを付ける。
あくまでも親だけだ。子供になんてとんでもない。

Aliceは1でBobは2。

|Id|Parent|
|:--|:--|:--|
|1|Alice|
|2|Bob|

そして子には親のIDを教えるのだ。
忘れるなよ。君たちの親だぞ。

Child ParentID
Carol 1
David 1
Eric 2
Frank 2

合流だ!

JOINしよう!

これで親子は再び出会えました。
もう離れることはありません。

めでたしめでたし。

Id Parent Child
1 Alice Carol
1 Alice David
2 Bob Eric
2 Bob Frank

いずれ子供が増えた時も、子が親元を離れる時も、テーブルも分割されているし、きっとうまくいくことでしょう。

具体的なSQLは?

心の眼で見るのです。

このQiitaはあなたの脳に直接語りかけました。

チャットメンバー募集

何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ

Twitter

https://twitter.com/YumaInaura

公開日時

2018-07-17

Discussion