SQLの相関サブクエリと非相関サブクエリの違いと使い方

SQLには、クエリ内で別のクエリを実行できる「サブクエリ」と呼ばれる機能があります。特に「相関サブクエリ」と「非相関サブクエリ」は、データ分析やレポート作成において非常に役立つツールです。この記事では、これらのサブクエリが何であるか、どのように使い分けるべきかについて深く探ります。

目次

サブクエリとは

サブクエリとは、SQLのSELECT文内で別のSELECT文を使うことです。これにより、より複雑なデータ操作やデータ抽出が可能になります。

相関サブクエリと非相関サブクエリの基本的な違い

相関サブクエリと非相関サブクエリは、いずれもクエリ内での小さなクエリですが、動作の仕方が異なります。

特性相関サブクエリ非相関サブクエリ
外部クエリとの関係外部クエリの結果に依存外部クエリの結果に依存しない
実行回数外部クエリの行数分一度だけ
使用場面行ごとの詳細な比較一括処理
相関サブクエリと非相関サブクエリの比較

相関サブクエリの特徴

相関サブクエリは、外部クエリの各行に対して実行されます。それゆえに、外部クエリの結果に依存する形になります。

SELECT column1 FROM table1 WHERE column2 = (SELECT column2 FROM table2 WHERE table2.column3 = table1.column3);

使用例: 商品と価格

例えば、商品ごとに最も新しい取引価格を知りたい場合、相関サブクエリを使います。

SELECT 商品名, 取引日, 価格 FROM 取引
WHERE (商品名, 取引日) IN (
  SELECT 商品名, MAX(取引日) FROM 取引 GROUP BY 商品名
);

非相関サブクエリの特徴

非相関サブクエリは、外部クエリとは独立して一度だけ実行されます。

SELECT column1 FROM table1 WHERE column2 IN (SELECT column2 FROM table2);

使用例: 在庫と注文

例えば、在庫が10未満の商品名を抽出したい場合、非相関サブクエリを使います。

SELECT 商品名 FROM 在庫 WHERE 商品名 NOT IN (SELECT 商品名 FROM 注文 WHERE 数量 >= 10);

まとめ

相関サブクエリと非相関サブクエリは、それぞれ独自の利点と使い道があります。相関サブクエリは外部クエリの各行に対して個別に実行され、より詳細なデータ分析に使用されます。一方で、非相関サブクエリは一度だけ実行され、大量のデータに対する一括処理に便利です。用途に応じて適切なサブクエリを選ぶことが重要です。

コメント

コメントする

目次