Open1

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

まさぴょん🐱まさぴょん🐱

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

SQLのサブクエリ(Sub Query)とは、別のSQLクエリ(主クエリ)の中に埋め込まれたSELECT文のことです。
サブクエリは、括弧 () で囲まれ、主クエリの条件や値を動的に提供するために使用されます。
主クエリの実行前にサブクエリが評価され、その結果が主クエリで利用されます。

主な特徴

  1. 位置:

    • サブクエリは主クエリのWHERE句、SELECT句、FROM句、HAVING句などに記述可能。
    • 例: WHERE column IN (SELECT ...) のように使う。
  2. 種類:

    • 単一行サブクエリ: 1行1列の結果を返す(例: =, >, < などの比較演算子で使用)。
    • 複数行サブクエリ: 複数行を返す(例: IN, ANY, ALL と組み合わせて使用)。
    • 相関サブクエリ: 主クエリの値を使ってサブクエリが実行される(EXISTS などでよく使用)。
  3. 用途:

    • 特定の条件を満たすデータを絞り込む。
    • 集計結果(例: 最大値や平均値)を利用して比較。
    • 複雑な条件を段階的に処理。

単一行サブクエリ

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によって異なる場合がある。

サブクエリは柔軟性が高い一方、適切な設計が重要です。