🖥
SQLのJOINが分からない? じゃあ逆から考えてみよう (親子関係を例にしたりして)
親子関係
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オープンチャットもご利用ください。
公開日時
2018-07-17
Discussion