SQLでのサブクエリ入門
サブクエリとは?
サブクエリ(ネストクエリ)とは、SQL文の中に含まれる別のSQLクエリのことです。主にSELECT文、INSERT文、UPDATE文、DELETE文の中で使用されます。
WHERE句でのサブクエリの使用
サブクエリは、主にWHERE句で特定の条件を満たすデータを取得する際に使われます。
SELECT name, age FROM employees
WHERE department_id = (SELECT department_id FROM departments WHERE department_name = 'Sales');
FROM句でのサブクエリの使用
サブクエリをFROM句で使用すると、一時的なテーブルのように扱えます。
SELECT avg_salary FROM (SELECT AVG(salary) AS avg_salary FROM employees);
SELECT句でのサブクエリの使用
SELECT句でサブクエリを使用すると、各行ごとに計算結果を取得できます。
SELECT name, salary, (SELECT AVG(salary) FROM employees) AS avg_salary FROM employees;
相関サブクエリとは?
相関サブクエリは、外側のクエリの各行に対して個別に実行されるサブクエリです。
SELECT name, salary FROM employees e1
WHERE salary > (SELECT AVG(salary) FROM employees e2 WHERE e1.department_id = e2.department_id);
サブクエリとJOINの違い
サブクエリは可読性が高いですが、JOINのほうがパフォーマンスが良い場合があります。
サブクエリのネスト(入れ子)
サブクエリは複数入れ子にすることも可能です。
SELECT name FROM employees
WHERE department_id = (SELECT department_id FROM departments WHERE location_id = (SELECT location_id FROM locations WHERE city = 'Tokyo'));
サブクエリのパフォーマンス向上のポイント
サブクエリを使用する際は、以下の点に注意するとパフォーマンスが向上します。
- インデックスを適切に使用する
- JOINを検討する
- EXISTSを活用する