[SQLの基本]サブクエリ入門: サブクエリの基本と応用

投稿日:

はじめに

SQLのサブクエリ(Subquery)は、他のクエリの内部に含まれるクエリのことです。サブクエリを使用することで、より複雑なデータの抽出や分析が可能になります。今回は、サブクエリの基本的な使用方法と応用例について解説します。

サブクエリの基本

サブクエリは、通常、括弧()で囲まれ、メインクエリの一部として使用されます。サブクエリは、SELECT、INSERT、UPDATE、DELETE文の中で使用できます。

基本的な例

employeesテーブルから最も高い給与を取得するサブクエリの例を見てみましょう。

SELECT 
  MAX(salary) 
FROM employees;

このクエリは最も高い給与を取得します。これをサブクエリとして使用し、その給与を受け取っている従業員の名前を取得するクエリは次の通りです。

SELECT 
  first_name, 
  last_name 
FROM employees
WHERE salary = (
  SELECT 
    MAX(salary) 
  FROM employees);

このクエリは、employeesテーブルから最も高い給与を受け取っている従業員の名前を返します。

サブクエリの種類

1. スカラーサブクエリ

スカラーサブクエリは、1つの値を返すサブクエリです。上記の基本的な例はスカラーサブクエリの一例です。


2. テーブルサブクエリ

テーブルサブクエリは、複数の列や行を返すサブクエリです。これを使用して、より複雑なデータを抽出できます。


3. 相関サブクエリ

相関サブクエリは、メインクエリの各行に対して評価されるサブクエリです。相関サブクエリは、メインクエリからの参照を含むことが多いです。


例 各従業員の給与が、その従業員の部門内で平均以上かどうかを確認するクエリは次の通りです。

SELECT 
  first_name, 
  last_name, 
  salary 
FROM employees e1
WHERE salary > (
  SELECT 
    AVG(salary) 
  FROM employees e2 
  WHERE e1.department_id = e2.department_id
);

このクエリは、employeesテーブルの各従業員の給与が、その従業員の部門の平均給与以上である従業員の名前と給与を返します。

1. IN演算子を使用したサブクエリ

特定の条件に一致する行を抽出する際に、IN演算子を使用してサブクエリを活用できます。

例 employeesテーブルから、特定の部門に属する従業員の名前を取得するクエリは次の通りです。

SELECT 
  first_name, 
  last_name 
FROM employees
WHERE department_id IN (
  SELECT 
    department_id 
  FROM departments 
  WHERE location_id = 100
);

このクエリは、departmentsテーブルからlocation_idが100の部門のIDを取得し、その部門に属する従業員の名前を返します。

2. EXISTS演算子を使用したサブクエリ

EXISTS演算子を使用して、特定の条件を満たす行が存在するかどうかを確認できます。

例 employeesテーブルから、部門に従業員が存在する部門の名前を取得するクエリは次の通りです。

SELECT 
  department_name 
FROM departments d
WHERE EXISTS (
  SELECT 
    1 
  FROM employees e 
  WHERE e.department_id = d.department_id
);

このクエリは、departmentsテーブルの各部門に少なくとも1人の従業員が存在する部門の名前を返します。

まとめ

今回は、SQLのサブクエリの基本的な使用方法と応用例について学びました。サブクエリを使用することで、より柔軟で強力なデータ操作が可能になります。次回の記事では、さらに高度なSQLクエリやデータベース操作について詳しく解説していきます。ぜひご期待ください!