テーブルをつなぐ

INPUT · スライド

つなぐ鍵をさがす

01 / 05

番号が指しているもの

2つの表をならべて見ると、共通しているものがある。ordersitem_id に入っている番号は、itemsid の番号なんだ。

つまり3番の注文の item_id2 なら、それは itemsid2 の商品だということ。

SELECT item_id FROM orders  WHERE id = 3;

実行結果

2

02 / 05

もう片方の表をひく

番号が分かったら、こんどは items を引く。番号を条件にすれば商品名が取れるよ。

これで「3番の注文はあさひ色のマグだった」と分かった。でもクエリを2回書いているし、間の 2 を手で運んでいるよね。

SELECT name FROM items  WHERE id = 2;

実行結果

あさひ色のマグ

03 / 05

サブクエリで1本にする

手で運んでいた番号は、前の節のサブクエリにそのまま置きかえられる。カッコの中で item_id を取ってきて、外側でその番号の商品を引くんだ。

これで1本のクエリになった。番号を知らなくても商品名までたどれるよ。

SELECT name FROM items  WHERE id = (    SELECT item_id FROM orders    WHERE id = 3  );

実行結果

あさひ色のマグ

04 / 05

鍵は名前が同じでなくていい

つなぐ鍵になっているのは orders.item_iditems.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件ずつでは足りない

サブクエリでたどれるのはその都度1つの番号まで。「全部の注文について商品名を出す」には、9件ぶん書くことになってしまう。

ほしいのは「注文と商品を、鍵でまとめて対応づける」書き方。それが次の節の JOIN だよ。まずは鍵をたどる手を慣らそう。ここから書いてみよう。