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?

🚀 SQLポケットガイドから学ぶ!業務を効率化するSQL実践テクニック3選

Last updated at Posted at 2025-02-22

この記事を読んで欲しい人

SQLの書き方次第で、データ抽出や集計のパフォーマンスは大きく変わります。本記事では、SQLポケットガイド 第4版 を基に、すぐに実務で役立つSQL効率化テクニックを厳選して解説します。

💡 テクニック①:クエリの記述順序と実行順序

🎯 クエリの課題:

「2020年以降に雇用された従業員が所属する部署のIDとその人数を、降順で表示してください。」

✅ 正解クエリ(記述順序):

SELECT d.department_id, COUNT(e.employee_id) AS employee_count
FROM employees e
JOIN departments d ON e.department_id = d.department_id
WHERE e.hire_date >= '2020-01-01'
GROUP BY d.department_id
HAVING COUNT(e.employee_id) > 0
ORDER BY employee_count DESC;

⚙️ 実行順序(データベース内部の処理フロー):

1.	FROM: employeesテーブルを取得
2.	JOIN: departmentsと内部結合
3.	WHERE: 2020年以降の雇用者を抽出
4.	GROUP BY: department_idごとにグループ化
5.	HAVING: 人数が1人以上の部署を抽出
6.	SELECT: 必要なカラムを取得
7.	ORDER BY: 人数の降順で並べ替え

✨ ポイント:

SQLは記述順と実行順が異なるため、処理の流れを理解することで効率的なクエリが書けます。

🚀 テクニック②:PL/SQLで実現する高度なロジック

SQLは何を取得するかを記述する宣言型言語ですが、
OracleのPL/SQLを使えば、どのように処理するかを細かく制御できます。

📝 SQLとPL/SQLの違い

項目 SQL (宣言型) PL/SQL (命令型)
目的 データ抽出や操作 手順制御や複雑なロジックの実装
制御構造 不可 IF、LOOP、CASEなどが使用可能
エラー処理 エラー時に即中断 例外(EXCEPTION)で安全に処理続行
処理単位 1つのSQL文 ブロック単位で複数の処理を一括実行

🌟 PL/SQL活用例:給与判定(IF文)

DECLARE
    v_salary NUMBER;
BEGIN
    SELECT salary INTO v_salary FROM employees WHERE employee_id = 101;
    IF v_salary >= 8000 THEN
        DBMS_OUTPUT.PUT_LINE('高収入');
    ELSE
        DBMS_OUTPUT.PUT_LINE('標準');
    END IF;
END;

⚡ 効率化ポイント:
1. ロジック制御: 条件分岐やループをSQL内部で実装可能
2. エラー対応: 例外処理(EXCEPTION)により安全性向上
3. 一括処理: ブロック単位で複数のSQLを効率的に実行

PL/SQLを使うことで、SQL単体では難しい高度な業務ロジックをデータベース内で直接実現できます。

🛠 テクニック③:CTE(共通テーブル式)で複雑なクエリをシンプルに

SQLで複雑なデータ抽出を行う際、ネストされたサブクエリは可読性を下げ、メンテナンス性を悪化させます。これを解決するのが CTE: Common Table Expressionです。

📝 CTEの概要

• WITH句を使って一時的な仮想テーブルを作成
• 複数回参照が可能で、冗長な記述を削減
• クエリを段階的に分割し、理解しやすく保つ

💡 CTE活用例:高給与者を抽出し、さらに名前で絞り込む

WITH high_salary AS (
    SELECT employee_id, first_name, salary
    FROM employees
    WHERE salary > 8000
)
SELECT * 
FROM high_salary
WHERE first_name LIKE 'A%';

⚙️ 実行の流れ:

  1. WITH句: high_salaryという仮想テーブルを作成
  2. メインクエリ: high_salaryに対してfirst_nameで条件絞り込み

🚀 効率化ポイント

  1. 可読性向上: クエリを論理的なブロックに分割
  2. パフォーマンス改善: CTEは内部的に最適化され、同じ処理の繰り返しを回避
  3. メンテナンス性: ロジック変更時にクエリ全体を修正せずに済む

CTEを使えば、長大なSQLをスリム化し、保守性と実行効率を同時に高められます。

🌟 まとめ:SQL効率化で業務を加速しよう!

今回紹介したテクニックを活用することで、SQLのパフォーマンスを向上させるだけでなく、可読性や保守性も飛躍的に向上します。

💪 効率化の鍵:
1. 実行順序の理解: 不要な処理を減らしてパフォーマンス改善
2. PL/SQL: 複雑なロジックをデータベース内で直接実行
3. CTE: クエリの見通しを良くし、メンテナンスを簡単に

SQLは「ただ書ける」だけでなく、最適に書けることが重要です。ぜひこれらのテクニックを習得し、業務効率を大幅に向上させましょう!

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?