0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

サブクエリを使いこなす:SELECT/INSERT/UPDATE/DELETEでの具体例

Posted at

はじめに

サブクエリとは、SQLの中に書かれた別のSQLです。

本記事では、SELECT / FROM / INSERT / UPDATE / DELETE それぞれの文での具体例を示しながら、初心者でも理解できるように解説します。

対象読者

SQL初心者〜中級者

SELECT文だけでなく、INSERT・UPDATE・DELETEでもサブクエリを使いたい方

データベース操作を効率化したい方

記事のゴール

サブクエリの基本的な書き方を理解する

SELECT / FROM / INSERT / UPDATE / DELETEでの使い方を具体例で学ぶ

実務でサブクエリを活用できるようになる

サブクエリとは?

サブクエリとは、SQLの中に書かれた別のSQLのことです。

用途は大きく分けて3つ:

  • 条件に使う
  • 値として使う
  • 一時テーブルとして使う

以下、具体例を挙げて確認してみます。

1. SELECT文でのサブクエリ(条件に使う)

🔸 従業員の給与が平均給与より高い人を取得する例

SELECT name, salary
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);

サブクエリ (SELECT AVG(salary) FROM employees) が平均給与を計算し、WHERE句で平均よりも給料の高い人を絞り込んでいます。

2. FROM句でのサブクエリ(一時テーブルとして使う)

🔸 特定の従業員をあらかじめ先にSELECTする例

SELECT emp.name, dep.department
FROM (
    SELECT name, department_id
    FROM employees
    WHERE hire_date >= '2020-01-01'
) AS emp
JOIN departments AS dep 
  ON emp.department_id = dep.id;

サブクエリではあらかじめ2020年以降に入社した従業員を絞り込み、一時テーブルとして利用しています。

その後、departmentsテーブルとJOINして部署名を取得しています。

employeesテーブルとdepartmentsテーブルをJOINしてから絞り込むよりも保守性が上がり、クエリによっては効率よく実行されます。

3. INSERT文でのサブクエリ(値として使う)

🔸 田中さんの従業員IDをサブクエリで取得し、ログに追加する例

INSERT INTO employee_log (employee_id, action, date)
VALUES (
    (SELECT id FROM employees WHERE name = '田中'),
    'login',
    NOW()
);

サブクエリが値として使われています。

テーブルからテーブルへスムーズにデータを登録できます。

4. UPDATE文でのサブクエリ(条件に使う)

🔸 営業部門の従業員の給与を10%増加する例

UPDATE employees
SET salary = salary * 1.1
WHERE department_id IN (SELECT id FROM departments WHERE name = '営業部門');

サブクエリで営業部門のIDを取得して、UPDATE対象を絞り込んでいます。

5. DELETE文でのサブクエリ(条件に使う)

🔸 人事部門の従業員データを削除する例

DELETE FROM employees
WHERE department_id IN (SELECT id FROM departments WHERE name = '人事部門');

サブクエリで削除対象の部門IDを取得しています。

まとめ

サブクエリは、SQLの中で別のSQLを実行して結果を取得する仕組みのことで、用途に応じて3つの使い方があります。

  • 条件に使う(WHERE, HAVINGなど)
  • 値として使う(INSERT, UPDATEなど)
  • 一時テーブルとして使う(FROM句)

初めはSELECT文でのサブクエリから練習すると理解しやすいです。
実務ではJOINやINと組み合わせると効率的にデータ操作ができます。

最後に
記事を読んでくださった方は、是非弊社開発課のXもフォローしてください。
毎日エンジニアに向けた情報発信を行っています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?