こんにちは、阿久梨絵です!
SQL でデータを操作する際、複雑な条件でデータを抽出したい場合があります。そのようなときに便利なのが「副問い合わせ(サブクエリ)」です。この記事では、副問い合わせの基本的な仕組みや使い方を初心者にもわかりやすく解説します。
副問い合わせとは?
副問い合わせとは、SQL文の中に別のSQL文を入れ子構造で記述することを指します。これにより、主クエリ(メインのSQL文)で使用するデータを動的に取得することができます。
副問い合わせの特徴
・柔軟性: 複雑な条件でデータを抽出可能。
・再利用性: 主クエリの中で副問い合わせを利用して効率的にデータを操作。
・構造: `()`で囲むことで副問い合わせを記述。
副問い合わせの使い方
副問い合わせは、以下のような場面で使用されます。
1. WHERE句での副問い合わせ
特定の条件に一致するデータを抽出する際に使用します。
SELECT * FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);
→ 従業員の平均給与より高い給与を持つ従業員を抽出。
2. SELECT句での副問い合わせ
主クエリの結果に追加情報を付加する際に使用します。
SELECT name, (SELECT department_name FROM departments WHERE departments.id = employees.department_id) AS department
FROM employees;
→ 従業員の名前と所属部署名を取得。
3. FROM句での副問い合わせ
一時的なテーブルを作成してデータを操作する際に使用します。
SELECT department_name, avg_salary
FROM (SELECT department_id, AVG(salary) AS avg_salary FROM employees GROUP BY department_id) AS dept_avg
JOIN departments ON dept_avg.department_id = departments.id;
→ 部署ごとの平均給与を取得。
副問い合わせの種類
1. スカラーサブクエリ: 単一の値を返す副問い合わせ。
・例: `(SELECT MAX(salary) FROM employees)` → 最大給与を取得。
2. テーブルサブクエリ: 複数の値を返す副問い合わせ。
・例: `(SELECT department_id FROM departments WHERE location = ‘Tokyo’)` → 東京にある部署IDを取得。
3. 相関サブクエリ: 主クエリと副問い合わせが相互に関連する構造。
SELECT name
FROM employees e1
WHERE salary > (SELECT AVG(salary) FROM employees e2 WHERE e1.department_id = e2.department_id);
→ 同じ部署内で平均給与より高い従業員を抽出。
副問い合わせのメリットとデメリット
メリット
・複雑な条件を簡潔に記述できる。
・再利用性が高く、柔軟なデータ操作が可能。
デメリット
・パフォーマンスの低下: 大量データを扱う場合、処理が遅くなることがある。
・可読性の低下: 入れ子構造が深くなると理解しづらくなる。
まとめ
副問い合わせは、 SQL で柔軟なデータ抽出を実現するための強力なツールです。WHERE句、SELECT句、FROM句などで活用することで、複雑な条件を効率的に処理できます。ただし、パフォーマンスや可読性に注意しながら使用することが重要です。
阿久梨絵でした!