今回の課題・得点と最高完了得点をこのブラウザに保存します。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)
▶
products の平均価格より高い商品の name と price を取得してください(サブクエリを使う)。
列の順序: name → price。行の順序は自由です。
25pt
○
「田中太郎」(id = 1) が注文した商品の name を、サブクエリ (IN) を使って取得してください。
25pt
○
customers の平均年齢より若い顧客の name と age を取得してください(サブクエリを使う)。
20pt