副問い合わせ(サブクエリ)とは?
SQLにおける副問い合わせ(サブクエリ)とは、SELECT文の中に別のSELECT文を記述することです。これにより、複雑な条件や複数のテーブルにまたがるデータの抽出を効率的に行うことができます。
副問い合わせの基本的な使い方
副問い合わせは、主に以下の場所で使用されます。
- WHERE句: 条件式の中で使用し、抽出するレコードを絞り込む。
- FROM句: サブクエリの結果を一時的なテーブルとして使用する。
- SELECT句: サブクエリの結果をカラムの値として取得する。
- HAVING句: GROUP BY句でグループ化された結果に対して条件を指定する。
副問い合わせの例
1. WHERE句での利用例
SELECT *
FROM products
WHERE price > (SELECT AVG(price) FROM products);
この例では、products
テーブルから平均価格よりも高い商品を選択しています。
サブクエリ (SELECT AVG(price) FROM products)
は、products
テーブルの平均価格を計算し、外側のクエリがその結果を使用して商品をフィルタリングします。
2. FROM句での利用例
SELECT customer_name, total_orders
FROM (
SELECT customer_id, COUNT(*) AS total_orders
FROM orders
GROUP BY customer_id
) AS order_summary
JOIN customers ON order_summary.customer_id = customers.customer_id;
この例では、サブクエリが顧客ごとの注文数を計算し、その結果を order_summary
という一時的なテーブルとして使用しています。
次に、この一時的なテーブルと customers
テーブルを結合して、顧客名と注文数を表示します。
3. SELECT句での利用例
SELECT product_name,
(SELECT AVG(price) FROM products) AS average_price
FROM products;
この例では、各商品の名前と、全商品の平均価格を一緒に表示します。
サブクエリ (SELECT AVG(price) FROM products)
は、各行に対して平均価格を計算し、その結果を average_price
というカラムとして表示します。
4. HAVING句での利用例
SELECT department, AVG(salary)
FROM employees
GROUP BY department
HAVING AVG(salary) > (SELECT AVG(salary) FROM employees);
この例では、部門ごとの平均給与が全社員の平均給与よりも高い部門を表示します。
サブクエリ (SELECT AVG(salary) FROM employees)
は、全社員の平均給与を計算し、HAVING
句がその結果を使用して部門をフィルタリングします。
副問い合わせの種類
副問い合わせには、主に以下の2つの種類があります。
- 非相関サブクエリ: サブクエリが外側のクエリに依存しない。
- 相関サブクエリ: サブクエリが外側のクエリの行に依存する。
副問い合わせの注意点
- パフォーマンス
副問い合わせは、複雑になるとパフォーマンスが低下する可能性があります。適切なインデックスの使用やクエリの最適化を検討しましょう。 - 可読性
副問い合わせが複雑になると、クエリの可読性が低下する可能性があります。適切なインデントやコメントを使用して、クエリを読みやすく保ちましょう。
まとめ
副問い合わせは、SQLの強力な機能の一つであり、複雑なデータ抽出や分析を可能にします。適切な場面で副問い合わせを活用し、効率的なデータ処理を行いましょう。
コメント