01 / 05
番号が指しているもの
2つの表をならべて見ると、共通しているものがある。orders の item_id に入っている番号は、items の id の番号なんだ。
つまり3番の注文の item_id が 2 なら、それは items の id が 2 の商品だということ。
SELECT item_id FROM orders WHERE id = 3;実行結果
2
テーブルをつなぐ
INPUT · スライド
01 / 05
2つの表をならべて見ると、共通しているものがある。orders の item_id に入っている番号は、items の id の番号なんだ。
つまり3番の注文の item_id が 2 なら、それは items の id が 2 の商品だということ。
SELECT item_id FROM orders WHERE id = 3;実行結果
2
02 / 05
番号が分かったら、こんどは items を引く。番号を条件にすれば商品名が取れるよ。
これで「3番の注文はあさひ色のマグだった」と分かった。でもクエリを2回書いているし、間の 2 を手で運んでいるよね。
SELECT name FROM items WHERE id = 2;実行結果
あさひ色のマグ
03 / 05
手で運んでいた番号は、前の節のサブクエリにそのまま置きかえられる。カッコの中で item_id を取ってきて、外側でその番号の商品を引くんだ。
これで1本のクエリになった。番号を知らなくても商品名までたどれるよ。
SELECT name FROM items WHERE id = ( SELECT item_id FROM orders WHERE id = 3 );実行結果
あさひ色のマグ
04 / 05
つなぐ鍵になっているのは orders.item_id と items.id の2つ。名前がちがっても、同じものを指していれば鍵になる。
逆に、名前が同じでも鍵にならないものもある。orders.id は注文の番号で、items.id は商品の番号。名前は同じ id だけど、まったく別のものだよ。
SELECT * FROM orders WHERE item_id = ( SELECT id FROM items WHERE name = 'わたのふきん' ) ORDER BY id;実行結果
2 | 3 | 2 | 4 | ウェブ 7 | 3 | 4 | 2 | アプリ
05 / 05
サブクエリでたどれるのはその都度1つの番号まで。「全部の注文について商品名を出す」には、9件ぶん書くことになってしまう。
ほしいのは「注文と商品を、鍵でまとめて対応づける」書き方。それが次の節の JOIN だよ。まずは鍵をたどる手を慣らそう。ここから書いてみよう。