テーブルをつなぐ

INPUT · スライド

商品の表が別にある

01 / 04

注文の表に名前がない

orders を見ても、売れたのが何なのかは分からない。入っているのは item_id という番号だけだからだよ。

「1番」「3番」「2番」と言われても、それが箸置きなのかマグなのかは読み取れないよね。

SELECT id, item_id, quantity  FROM orders  LIMIT 3;

実行結果

1 | 1 | 2
2 | 3 | 4
3 | 2 | 4

02 / 04

商品の表

商品の情報は items テーブルに、商品1つが1レコードで入っている。

  • id … 商品の番号
  • name … 商品名
  • price … 値段
  • category … 種類
SELECT * FROM items;

実行結果

1 | ひのきの箸置き | 480 | 食卓
2 | あさひ色のマグ | 1600 | 食卓
3 | わたのふきん | 340 | キッチン
4 | こもれびランプ | 3800 | あかり
5 | まめのコースター | 260 | 食卓
6 | つきよの花びん | 2400 | かざり

03 / 04

なぜ分けてしまうのか

「注文のたびに商品名と値段も書けばいいのに」と思うよね。でも分けておくと得なことが多いんだ。

  • 同じ商品名を何度も書かなくていい
  • 値段を変えるとき直すのは1か所だけ
  • 打ち間違いの表記が混ざらない

こうやって役割ごとに表を分けるのが、データベースのふつうの姿だよ。

SELECT name, price FROM items  ORDER BY price DESC  LIMIT 3;

実行結果

こもれびランプ | 3800
つきよの花びん | 2400
あさひ色のマグ | 1600

04 / 04

いまはまだ別々に読む

items にも今まで覚えた道具がそのまま使える。WHERE で絞れるし、GROUP BY でまとめられるし、AS で別名も付けられるよ。

つなぐ書き方はまだ出てこない。この節では2つの表を片方ずつ読む練習をして、次から鍵をさがしていこう。ここから書いてみよう。

SELECT category, COUNT(*) AS kinds  FROM items  GROUP BY category  ORDER BY category;

実行結果

あかり | 1
かざり | 1
キッチン | 1
食卓 | 3