0Pricing
SQL Academy · レッスン

スカラー、行、テーブルのサブクエリ

単一の値、単一の行、またはテーブル全体を返すサブクエリを使い、SELECT、FROM、WHERE句に配置します。

「スカラー、行、テーブルのサブクエリ」はCoddyKit上の無料SQL Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSQL Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 SQL Academyコースには全4レッスンが含まれています。

サブクエリとは

サブクエリとは、別のSQL文の中にあるSELECTです。次の形式があります:

  • スカラーサブクエリ — 単一の値を返します
  • 行サブクエリ — 1行を返します
  • テーブルサブクエリ — リレーションを返します(FROMで使用します)

スカラーサブクエリ

単一の値が期待される場所ならどこでも使えます:

SELECT id, total,
       total - (SELECT AVG(total) FROM orders) AS diff_from_avg
FROM orders
WHERE created_at >= NOW() - INTERVAL '30 days';

行サブクエリ

複数列を持つ1行を返します。あまり一般的ではなく、主に行コンストラクターとともに使います:

SELECT *
FROM orders
WHERE (status, country) = (
  SELECT status, country FROM orders WHERE id = 1
);

FROM内のテーブルサブクエリ

クエリ結果を一時テーブルのように扱います:

SELECT country, AVG(big_order_total) AS avg_big
FROM (
  SELECT country, total AS big_order_total
  FROM orders
  WHERE total > 1000
) AS sub
GROUP BY country;

FROMサブクエリにエイリアスを付ける

PostgreSQLでは、すべてのFROMサブクエリにエイリアスが必要です。使用しない場合でも同様です:

SELECT * FROM (SELECT 1) sub;     -- "sub" required

WHERE内のサブクエリ

導出された値の集合でフィルタリングします:

SELECT * FROM users
WHERE id IN (
  SELECT user_id FROM orders WHERE total > 100
);

EXISTS / NOT EXISTS

サブクエリが1行以上返すかどうかを確認します:

SELECT * FROM users u
WHERE EXISTS (
  SELECT 1 FROM orders o WHERE o.user_id = u.id
);

SELECT内のサブクエリ

行ごとに評価されるスカラーサブクエリを埋め込みます:

SELECT id, full_name,
  (SELECT COUNT(*) FROM orders o WHERE o.user_id = u.id) AS order_count
FROM users u;

-- Often readable, but a LEFT JOIN + GROUP BY is usually faster.

式としてのサブクエリ

複数行を返すスカラーサブクエリはエラーになります:

SELECT (SELECT email FROM users);
-- ERROR: more than one row returned by a subquery used as an expression

JOINに書き換えるタイミング

多くの「x IN (SELECT...)」はJOINに書き換えられます。読みやすい形式を選んでください。現代的なプランナーでは、同じ実行計画になることがよくあります。

サブクエリとCTE

同じサブクエリが2回必要な場合は、CTEを使って名前を付けます。詳しくは次のレッスンで扱います。

まとめ

サブクエリには3つの形式があります。

  • SELECT/WHERE内のスカラー
  • 等価比較に使う行
  • FROM内のテーブル
  • 「一致するものがあるか」の確認に使うEXISTS

クイックチェック

一時テーブルとしてFROM句内で使うサブクエリの形式はどれですか?

よくある質問

「スカラー、行、テーブルのサブクエリ」レッスンは無料ですか?

はい。「スカラー、行、テーブルのサブクエリ」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、SQL Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 SQL Academyコースには全4レッスンが含まれています。

「スカラー、行、テーブルのサブクエリ」で何を学びますか?

単一の値、単一の行、またはテーブル全体を返すサブクエリを使い、SELECT、FROM、WHERE句に配置します。 ブラウザで直接実行するハンズオンコードでSQL Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

SQL Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのSQL Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「スカラー、行、テーブルのサブクエリ」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このSQL Academyレッスンでコードを書いて実行できますか?

はい。すべてのSQL Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. スカラー、行、テーブルのサブクエリ
  2. 相関サブクエリと非相関サブクエリ
  3. 共通テーブル式(WITH)
  4. 階層構造向け再帰CTE
← SQL Academyに戻る