今回の課題・得点と最高完了得点をこのブラウザに保存します。SQL入力・実行結果・教材DBへの変更は再読み込みで戻ります。誤答やヒントによる減点はありません。
最高完了得点: 0 / 70pt
サブクエリ — クエリの中のクエリ
中級約12分3問
SELECT の中に別の SELECT を入れるサブクエリで、「平均より高い」「◯◯が注文した商品」などの条件を作る方法を練習します。
サブクエリとは
サブクエリ は、クエリの中に入れ子にしたもう 1 つの SELECT です。
「まず内側で値を求めて、それを外側の条件に使う」という 2 段構えを 1 文で書けます。
1 つの値を返すサブクエリ(スカラサブクエリ)
「平均価格より高い商品」を出したいとします。平均価格はクエリを打つまで
分からないので、数値を直接書けません。サブクエリでその場で求めます。
SELECT name, price
FROM products
WHERE price > (SELECT AVG(price) FROM products);
内側の (SELECT AVG(price) FROM products) が平均価格 1 つを返し、外側が
「それより高い行」を選びます。平均が変わってもクエリは書き換え不要です。
複数の値を返すサブクエリ(IN)
サブクエリが複数行を返すときは = ではなく IN で受けます。
-- 田中太郎 (id=1) が注文した「商品」を求める
SELECT name FROM products
WHERE id IN (SELECT product_id FROM orders WHERE customer_id = 1);
内側は「田中太郎の注文にある product_id の一覧」を返し、外側は
「その id に一致する商品」を選びます。
JOIN との使い分け
同じことは JOIN でも書けますが、
- 一覧に他テーブルの列も並べたい → JOIN
- 条件として使いたいだけ(結果には出さない) → サブクエリ
がすっきりする目安です。
次のレッスン: サブクエリ応用 — 相関サブクエリと FROM 句
教材DBを初期化中...
SQL エディタCtrl / ⌘ + Enter で実行 · Esc → Tab で移動
結果は1000行まで・実行は30秒まで。中止・リセットは教材への変更だけを破棄し、入力SQLと進捗は残します。
教材DBを初期化しています。
SQL を入力して実行してください
練習問題 — 0/3 完了 (0/70pt)
▶25pt
products の平均価格より高い商品の name と price を取得してください(サブクエリを使う)。
列の順序: name → price。行の順序は自由です。
○25pt
「田中太郎」(id = 1) が注文した商品の name を、サブクエリ (IN) を使って取得してください。
○20pt
customers の平均年齢より若い顧客の name と age を取得してください(サブクエリを使う)。