SELECT文の中に埋め込むクエリの全パターン
SELECT 文の中に埋め込まれた別の SELECT 文。括弧で囲み、外側クエリの条件・列・テーブルとして使用できる。
| 位置 | 名称 | 例 |
|---|---|---|
| WHERE 句 | スカラー/行サブクエリ | WHERE 金額 > (SELECT AVG(金額) FROM 受注) |
| FROM 句 | インラインビュー(派生テーブル) | FROM (SELECT ...) AS t |
| SELECT 句 | スカラーサブクエリ | SELECT (SELECT COUNT(*) FROM ...) AS cnt |
| WITH 句 | CTE(共通テーブル式) | WITH cte AS (SELECT ...) SELECT * FROM cte |
-- 平均金額より高い受注を取得 SELECT 受注ID, 金額 FROM 受注 WHERE 金額 > (SELECT AVG(金額) FROM 受注); -- IN を使った複数値サブクエリ SELECT 顧客名 FROM 顧客 WHERE 顧客ID IN (SELECT 顧客ID FROM 受注 WHERE 金額 >= 10000);
-- 受注がある顧客だけを取得 SELECT 顧客名 FROM 顧客 c WHERE EXISTS ( SELECT 1 FROM 受注 o WHERE o.顧客ID = c.顧客ID );
WITH high_orders AS ( SELECT 顧客ID, SUM(金額) AS 合計 FROM 受注 GROUP BY 顧客ID HAVING SUM(金額) >= 50000 ) SELECT c.顧客名, h.合計 FROM 顧客 c JOIN high_orders h ON c.顧客ID = h.顧客ID;
CTE は可読性が高く、同じサブクエリを複数回参照するときに有効。
読了ボタンを押すとトップページの進捗に反映されます