Open1
SQLのサブクエリ(Sub Query)について📝

SQLのサブクエリ(Sub Query)について📝
SQLのサブクエリ(Sub Query)とは、別のSQLクエリ(主クエリ)の中に埋め込まれたSELECT文のことです。
サブクエリは、括弧 () で囲まれ、主クエリの条件や値を動的に提供するために使用されます。
主クエリの実行前にサブクエリが評価され、その結果が主クエリで利用されます。
主な特徴
-
位置:
- サブクエリは主クエリの
WHERE
句、SELECT
句、FROM
句、HAVING
句などに記述可能。 - 例:
WHERE column IN (SELECT ...)
のように使う。
- サブクエリは主クエリの
-
種類:
-
単一行サブクエリ: 1行1列の結果を返す(例:
=
,>
,<
などの比較演算子で使用)。 -
複数行サブクエリ: 複数行を返す(例:
IN
,ANY
,ALL
と組み合わせて使用)。 -
相関サブクエリ: 主クエリの値を使ってサブクエリが実行される(
EXISTS
などでよく使用)。
-
単一行サブクエリ: 1行1列の結果を返す(例:
-
用途:
- 特定の条件を満たすデータを絞り込む。
- 集計結果(例: 最大値や平均値)を利用して比較。
- 複雑な条件を段階的に処理。
例
単一行サブクエリ
SELECT name
FROM employees
WHERE salary = (SELECT MAX(salary) FROM employees);
→ 最も高い給料を持つ従業員の名前を取得。
複数行サブクエリ
SELECT name
FROM employees
WHERE department_id IN (SELECT department_id FROM departments WHERE location = 'Tokyo');
→ 東京にある部署に所属する従業員の名前を取得。
相関サブクエリ
SELECT name
FROM employees e
WHERE EXISTS (
SELECT 1
FROM departments d
WHERE d.department_id = e.department_id AND d.location = 'Tokyo'
);
→ 東京の部署に所属する従業員をチェック。
注意点
-
パフォーマンス: サブクエリは複雑になると実行速度が低下する場合がある。
JOIN
で置き換え可能な場合は検討する。 - 可読性: ネストが深すぎるとコードが読みづらくなるため、適切な命名やコメントを活用。
- データベース依存: サブクエリの動作や制限は、MySQL、PostgreSQL、SQL ServerなどのDBMSによって異なる場合がある。
サブクエリは柔軟性が高い一方、適切な設計が重要です。