Day 2・まとめる・つなぐ — 集計とJOIN
2つの表をつなぐ — JOIN
なぜテーブルを分けるのか、そしてJOINでキーを使って2つの表をひもづける考え方。
なぜテーブルを分けるのか
実務のデータは、たいてい複数の表に分かれています。ユーザーの情報はusersテーブル、注文の情報はordersテーブル、というように。なぜ1枚にまとめず、わざわざ分けるのでしょう。
理由は「同じことを何度も書きたくない」からです。もし注文伝票に毎回お客さんの名前・住所・電話番号をフルで書いていたら、同じ人が10回注文すれば同じ情報を10回書くことになります。引っ越したら10か所ぜんぶ直す必要も出てきます。これはミスのもとです。
1枚に全部詰め込む
注文ごとに、顧客の名前・住所・電話番号をそのまま書き込む。同じ人の情報が何度も重複し、変更が起きると全部を直す必要があってミスが出やすい。
分けてJOINでつなぐ
顧客情報はusersに1人1行だけ持つ。ordersには「顧客番号(user_id)」だけを書き、必要なときにJOINで名前などを取りに行く。重複がなく、変更も1か所で済む。
キーでひもづける — 顧客番号で照合する
分けた表をつなぎ直すのがJOIN(ジョイン)です。たとえるなら、注文伝票に書かれた「顧客番号」を手がかりに、名簿(users)から同じ番号の人を探して照合する動きです。この「手がかりの番号」をキー(この例ではuser_id)と呼びます。
SELECT orders.id, users.name
FROM orders
JOIN users ON orders.user_id = users.id;読み方はこうです。「ordersから始めて(FROM orders)、usersをつなぐ(JOIN users)。つなぐ条件は、ordersのuser_idとusersのidが一致すること(ON ...)」。ON以下が「同じ顧客番号どうしを照合する」の部分です。
ONのつなぐ条件を書き忘れない
JOINでON(つなぐ条件)を書き忘れると、全部の行と全部の行が総当たりでくっついて、膨大な意味のない行が出てしまいます。「どのキーで照合するのか」を必ずONで指定します。
AIにはこう聞く
「ordersとusersをuser_idでつないで、注文IDとユーザー名を出すSQLを書いて。なぜテーブルを分けてJOINでつなぐのかも、重複の観点で説明して」と頼むと、JOINの目的まで理解できます。
読んでも腑に落ちない所は、AIに噛み砕いてもらいましょう。
理解度チェック
答えられれば、面接で説明できる状態に一歩近づきます。
JOIN ... ON orders.user_id = users.id の ON は何を表す?
なぜ顧客情報を注文テーブルに毎回書かず、テーブルを分けてJOINでつなぐのか。伝票と名簿のたとえで説明してください。
記述式です。まず自分の言葉で答えを考えてから、模範解答を開いて自己採点してください。