SQLのサブクエリ(副問合せ)を初心者向けに解説します

プログラミング 公開日:
ブックマーク
SQLのサブクエリ(副問合せ)を初心者向けに解説します
サブクエリ(副問い合わせ)とは、クエリの中で使用される別のクエリのことを指します。サブクエリを使用すると、複雑な条件を持つクエリを簡潔に表現でき、データの抽出や加工をより柔軟に行うことができます。

サブクエリ(副問合せ)とは?

サブクエリ(副問い合わせ)とは、クエリの中で使用される別のクエリのことを指します。

サブクエリを使用すると、複雑な条件を持つクエリを簡潔に表現でき、データの抽出や加工をより柔軟に行うことができます。

基本構文

サブクエリは、メインクエリのSELECTFROMWHEREHAVINGINSERTUPDATEDELETE文の中で使用することができます。

基本的な構文は以下の通りです。

SELECT カラム1, カラム2, ...
FROM テーブル名
WHERE カラム = (SELECT カラム FROM 他テーブル名 WHERE 条件);

具体的なコードを見ながら、サブクエリの利用イメージを膨らませてみましょう。

条件式におけるデータ絞り込み

WHERE句やHAVING句の中でサブクエリを使用すると、データ抽出の条件をより細かく指定することができます。

例えば、売上金額が平均売上金額より高い顧客を抽出したい場合、次のように記述できます。

SELECT customer_name, sales_amount 
FROM customers
WHERE sales_amount > (SELECT AVG(sales_amount) FROM customers);

この例では、サブクエリが平均売上金額を計算し、その結果をWHERE句の条件として使用しています。

データの追加におけるデータ取得

INSERT文でサブクエリを使用すると、他のテーブルからデータを取得して、新しいレコードを作成することができます。

例えば、顧客情報テーブルに、注文情報テーブルから取得した最新の注文日時を追加する場合、次のように記述できます。

INSERT INTO customers (customer_name, last_order_date)
SELECT customer_name, MAX(order_date)
FROM orders
GROUP BY customer_name;

この例では、サブクエリが、各顧客の最新の注文日時を取得し、INSERT文によって新しいレコードに反映されます。

データの更新におけるデータ取得

UPDATE文でサブクエリを使用すると、他のテーブルからデータを取得して、既存のレコードを更新することができます。

例えば、特定の製品の価格を、同じカテゴリの製品の平均価格に更新したい場合、次のように記述できます。

UPDATE products
SET price = (SELECT AVG(price) FROM products WHERE category = 'Electronics')
WHERE category = 'Electronics';

この例では、サブクエリが同じカテゴリの製品の平均価格を取得し、UPDATE文のSET句の中で使用しています。
つまりサブクエリは、外側のSQL文に更新対象の値(この場合は平均価格)を提供する役割を果たしています。

データの削除におけるデータ取得

DELETE文でサブクエリを使用すると、他のテーブルからデータを取得して、特定のレコードを削除することができます。

例えば、特定の顧客の注文履歴を削除する場合、次のように記述できます。

DELETE FROM orders
WHERE customer_id IN (SELECT customer_id FROM customers WHERE customer_name = 'John Doe');

この例では、サブクエリが特定の顧客のIDを取得し、DELETE文のWHERE句の中で使用されています。
サブクエリは、外側のSQL文に削除対象のレコードを特定するための情報を提供しています。

サブクエリの注意点

サブクエリの使用には、いくつか注意すべき点があります。

パフォーマンスへの影響

サブクエリは、通常のSQL文よりも処理時間がかかる場合が多いです。
先ほどの例でも、同じカテゴリの製品のレコードが大量にあった場合、それだけで処理が重くなります。

その場合は、適切なインデックスを設定したり、(可能であれば)1つのクエリで実行せず、分割して実行することで結果処理が早まる可能性が高いです。

SQL文の複雑化

サブクエリは複数組み合わせることも可能ですが、ネストさせたSQL文は非常に複雑になりやすく、他者が見た際に理解しづらくなる場合があります。

サブクエリを使う際は、可読性を意識しながら、適切に利用することが重要です。

最後に・・

サブクエリを使うと、非常に簡潔かつ柔軟にクエリを書くことができる一方、あまり考えずに多用してしまうと、SQLが複雑になったり、パフォーマンスが著しく落ちる可能性もあります。

基本的な構文や特性を理解した後は、パフォーマンスや可読性といった点にも気をつけながら、利用していきましょう。

TECH PLAYでは、ITに関わる様々なイベント・勉強会・講演会・交流会・カンファレンス・セミナーなどの情報を集約し掲載しています。

テクノロジーと共に成長しよう、
活躍しよう。

TECH PLAYに登録すると、
スキルアップやキャリアアップのための
情報がもっと簡単に見つけられます。

面白そうなイベントを見つけたら
積極的に参加してみましょう。
ログインはこちら

タグからイベントをさがす