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`テーブルを用いた簡単な例です。
employees | departments |
---|---|
id, name, department_id | id, name |
1, Alice, 1 | 1, HR |
2, Bob, 2 | 2, 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`テーブルを用いた例です。
employees | departments | locations |
---|---|---|
id, name, department_id | id, name, location_id | id, address |
1, Alice, 1 | 1, HR, 1 | 1, Tokyo |
2, Bob, 2 | 2, Finance, 2 | 2, 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'
)
);
まとめ
相関サブクエリは複数のテーブルにまたがる複雑な条件でのデータ抽出に非常に強力です。基本的な書き方から複数テーブルを扱う高度なケースまで、様々な場面で利用することができます。この記事が、相関サブクエリの理解と実践に役立つことを願っています。
created by Rinker
¥4,554
(2024/11/22 10:55:01時点 Amazon調べ-詳細)
コメント