01 / 05
表はひとつじゃない
ここまでは、いつも1つの表だけを見てきた。でも本物のアプリのデータは、いくつもの表に分かれてしまわれているんだ。
この章では手作り雑貨のお店を題材に、「注文」「商品」「会員」の3つの表を行き来する。最後には表と表をつないで1つの結果にできるようになるよ。
テーブルをつなぐ
INPUT · スライド
01 / 05
ここまでは、いつも1つの表だけを見てきた。でも本物のアプリのデータは、いくつもの表に分かれてしまわれているんだ。
この章では手作り雑貨のお店を題材に、「注文」「商品」「会員」の3つの表を行き来する。最後には表と表をつないで1つの結果にできるようになるよ。
02 / 05
まず使うのは orders テーブル。注文1件が1レコードだよ。
id … 注文の番号item_id … 何を買ったかmember_id … だれが買ったかquantity … いくつ買ったかchannel … どこから注文したかSELECT * FROM orders;実行結果
1 | 1 | 1 | 2 | アプリ 2 | 3 | 2 | 4 | ウェブ 3 | 2 | 1 | 4 | 店頭 4 | 4 | 3 | 1 | アプリ 5 | 5 | 4 | 3 | ウェブ 6 | 1 | 3 | 2 | ウェブ 7 | 3 | 4 | 2 | アプリ 8 | 2 | 2 | 3 | アプリ 9 | 5 | 1 | 6 | 店頭
03 / 05
item_id と member_id をよく見ると、番号しか入っていない。商品名も会員名もこの表にはないんだ。
つまりいまは「3番の商品が4つ売れた」までしか読めない。名前は別の表にしまってあるからだよ。ここをつなぐのが、この章の目標。
SELECT * FROM orders WHERE channel = '店頭';実行結果
3 | 2 | 1 | 4 | 店頭 9 | 5 | 1 | 6 | 店頭
04 / 05
表が変わっても WHERE ORDER BY LIMIT の使い方は同じ。列を選び、行を絞り、並べて、件数を決める——覚えた形がそのまま通じるよ。
SELECT id, quantity FROM orders ORDER BY quantity DESC LIMIT 3;実行結果
9 | 6 2 | 4 3 | 4
05 / 05
GROUP BY も同じ。channel ごとに quantity を合計すれば、どこからの注文がよく動いているか分かるね。
この節は復習だけ。新しい書き方は出てこないから、手を慣らしてから次に進もう。ここから書いてみよう。
SELECT channel, SUM(quantity) FROM orders GROUP BY channel;実行結果
アプリ | 8 ウェブ | 9 店頭 | 10