01 / 04
買った人の表
orders に残っていた番号がもう1つあったよね。member_id だよ。
これは members テーブルの id を指している。会員1人が1レコードだよ。
id… 会員の番号name… 会員の名前city… 住んでいる町
SELECT * FROM members;実行結果
1 | みなと | あおば市 2 | すずな | ひなた町 3 | かえで | あおば市 4 | いつき | みずうみ市 5 | ののか | ひなた町
テーブルをつなぐ
INPUT · スライド
01 / 04
orders に残っていた番号がもう1つあったよね。member_id だよ。
これは members テーブルの id を指している。会員1人が1レコードだよ。
id … 会員の番号name … 会員の名前city … 住んでいる町SELECT * FROM members;実行結果
1 | みなと | あおば市 2 | すずな | ひなた町 3 | かえで | あおば市 4 | いつき | みずうみ市 5 | ののか | ひなた町
02 / 04
これで表が3つそろった。関係を言葉にするとこうなるよ。
orders.item_id は items.id を指すorders.member_id は members.id を指すitems と members は直接つながっていないorders が真ん中にいて、両側の表を橋わたししている形だね。「何を」「だれが」を注文の表が持っているんだ。
SELECT id, item_id, member_id FROM orders LIMIT 3;実行結果
1 | 1 | 1 2 | 3 | 2 3 | 2 | 1
03 / 04
つなぎ方は items のときと同じ。ON に書く鍵を orders.member_id = members.id に変えるだけだよ。
注文と会員が対応づいて、だれが何個買ったかが名前で読めるようになった。
SELECT members.name, orders.quantity FROM orders JOIN members ON orders.member_id = members.id;実行結果
みなと | 2 すずな | 4 みなと | 4 かえで | 1 いつき | 3 かえで | 2 いつき | 2 すずな | 3 みなと | 6
04 / 04
ここで気をつけたいのが、items にも members にも name という列があること。
2つだけつなぐうちは name と書いても通ってしまうけれど、3つつなぐと「どっちの name か分からない」とエラーになる。はじめから members.name と書く癖をつけておこう。
SELECT members.name, SUM(orders.quantity) AS total FROM orders JOIN members ON orders.member_id = members.id GROUP BY members.name ORDER BY total DESC;実行結果
みなと | 12 すずな | 7 いつき | 5 かえで | 3