SQLでサブクエリを使用する理由と例


  1. 条件に基づくフィルタリング: サブクエリは、条件に基づいて結果セットをフィルタリングするために使用できます。例えば、以下のようなクエリを考えてみましょう。
SELECT * FROM employees WHERE department_id IN (SELECT department_id FROM departments WHERE location = 'Tokyo');

このクエリでは、departmentsテーブルからlocationが'Tokyo'の部門のdepartment_idをサブクエリで取得し、それを使ってemployeesテーブルから該当する部門の従業員を抽出しています。

  1. 集計関数の結果の使用: サブクエリは、集計関数の結果を使用してデータを取得するためにも使用できます。例えば、以下のようなクエリを考えてみましょう。
SELECT employee_id, first_name, last_name
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);

このクエリでは、employeesテーブルのsalary列の平均値をサブクエリで計算し、それを使ってsalaryが平均以上の従業員の情報を抽出しています。

  1. サブクエリの結果をテーブルとして使用: サブクエリの結果を一時的なテーブルとして扱うこともできます。これにより、複雑なクエリをより管理しやすくすることができます。以下は、このような例です。
SELECT e.employee_id, e.first_name, e.last_name, d.department_name
FROM employees e
JOIN (SELECT department_id, department_name FROM departments WHERE location = 'Tokyo') d
ON e.department_id = d.department_id;

このクエリでは、departmentsテーブルからlocationが'Tokyo'の部門のdepartment_idとdepartment_nameをサブクエリで取得し、それをJOINしてemployeesテーブルと結合しています。

サブクエリは、データの制御や操作の柔軟性を向上させるための強力なツールです。ただし、複数のサブクエリが含まれるクエリや、大量のデータを処理する場合は、パフォーマンスの問題に注意する必要があります。適切なインデックスの設定やクエリの最適化など、最適なパフォーマンスを得るための工夫も必要です。