この記事を読んで欲しい人
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%';
⚙️ 実行の流れ:
- WITH句: high_salaryという仮想テーブルを作成
- メインクエリ: high_salaryに対してfirst_nameで条件絞り込み
🚀 効率化ポイント
- 可読性向上: クエリを論理的なブロックに分割
- パフォーマンス改善: CTEは内部的に最適化され、同じ処理の繰り返しを回避
- メンテナンス性: ロジック変更時にクエリ全体を修正せずに済む
CTEを使えば、長大なSQLをスリム化し、保守性と実行効率を同時に高められます。
🌟 まとめ:SQL効率化で業務を加速しよう!
今回紹介したテクニックを活用することで、SQLのパフォーマンスを向上させるだけでなく、可読性や保守性も飛躍的に向上します。
💪 効率化の鍵:
1. 実行順序の理解: 不要な処理を減らしてパフォーマンス改善
2. PL/SQL: 複雑なロジックをデータベース内で直接実行
3. CTE: クエリの見通しを良くし、メンテナンスを簡単に
SQLは「ただ書ける」だけでなく、最適に書けることが重要です。ぜひこれらのテクニックを習得し、業務効率を大幅に向上させましょう!