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

[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人の従業員が存在する部門の名前を返します。

サブクエリとJOINの使い分け

サブクエリで実現できる処理は、JOINでも書けるケースがあります。一般的な使い分けの目安は以下の通りです。

サブクエリ向き: WHERE句で1つの値や値リストを使って絞り込みたい場合(スカラーサブクエリ、IN句)

JOIN向き: 複数テーブルの列をまとめて取得したい場合

パフォーマンスはデータ量やインデックスの有無によって変わるため、大量データを扱う場合はEXPLAINで実行計画を確認してみましょう。

まとめ

今回は、SQLのサブクエリの基本的な使用方法と応用例について学びました。スカラーサブクエリ、テーブルサブクエリ、相関サブクエリの3種類を理解し、IN演算子やEXISTS演算子との組み合わせを覚えておくと、複雑なデータ抽出にも対応できるようになります。

SheetFlow - 学んだSQLを業務で活かそう

SQLマーケティングアカデミーで身につけたSQLスキル、実務でも使ってみませんか?

SheetFlowは、ExcelファイルをアップロードしてSQLで直接操作できるクラウドサービスです。学んだSELECT文やJOIN、集計関数をそのまま業務データに適用し、手作業の集計を自動化できます。

SheetFlowを無料で試す