相関サブクエリで複数テーブルを効率的に処理する方法

SQLで複雑なデータ処理を行う際に相関サブクエリは頻繁に用いられます。特に複数のテーブルを扱うケースではその力を発揮します。本記事では、相関サブクエリの基本から応用例までをデータテーブルを交えて詳しく解説します。

目次

相関サブクエリとは

相関サブクエリは、メインクエリの各行に依存するサブクエリの一種です。通常のサブクエリが一度だけ評価されるのに対して、相関サブクエリはメインクエリの各行ごとに評価されます。

通常のサブクエリとの違い

通常のサブクエリは一度評価されると、その結果がメインクエリに適用されます。しかし、相関サブクエリはメインクエリの行ごとにサブクエリが評価され、その結果が個々の行に適用されるため、より柔軟な処理が可能です。

-- 通常のサブクエリ
SELECT * FROM employees WHERE department_id = (SELECT department_id FROM departments WHERE name = 'HR');

-- 相関サブクエリ
SELECT * FROM employees e WHERE EXISTS (SELECT 1 FROM departments d WHERE e.department_id = d.department_id AND d.name = 'HR');

相関サブクエリの基本的な書き方

基本的な相関サブクエリの構文は以下の通りです。

SELECT * FROM table1 AS alias1 WHERE condition (SELECT column FROM table2 AS alias2 WHERE alias1.column = alias2.column);

基本例

以下は、`employees`テーブルと`departments`テーブルを用いた簡単な例です。

employeesdepartments
id, name, department_idid, name
1, Alice, 11, HR
2, Bob, 22, Finance
基本例のテーブル構造
SELECT * FROM employees e WHERE EXISTS (SELECT 1 FROM departments d WHERE e.department_id = d.id AND d.name = 'HR');

複数テーブルを扱う場合

複数のテーブルを扱う場合でも、相関サブクエリの構文は大きくは変わりません。重要なのは、どのようにテーブルを連携させるかです。

複数テーブル例

`employees`テーブル、`departments`テーブル、さらに`locations`テーブルを用いた例です。

employeesdepartmentslocations
id, name, department_idid, name, location_idid, address
1, Alice, 11, HR, 11, Tokyo
2, Bob, 22, Finance, 22, New York
複数テーブル例のテーブル構造
SELECT * FROM employees e WHERE EXISTS (
  SELECT 1 FROM departments d
  WHERE e.department_id = d.id AND EXISTS (
    SELECT 1 FROM locations l
    WHERE d.location_id = l.id AND l.address = 'Tokyo'
  )
);

まとめ

相関サブクエリは複数のテーブルにまたがる複雑な条件でのデータ抽出に非常に強力です。基本的な書き方から複数テーブルを扱う高度なケースまで、様々な場面で利用することができます。この記事が、相関サブクエリの理解と実践に役立つことを願っています。

コメント

コメントする

目次