【データベース】SQLクエリチートシート - j-komatsu/myCheatSheet GitHub Wiki

SQLクエリチートシート

目的

SQLクエリの基本操作から応用までを整理し、効率的なデータ操作や分析をサポートする。


インデックス

  1. データの選択 (SELECT)
  2. 条件付きデータ取得 (WHERE)
  3. データの挿入 (INSERT)
  4. データの更新 (UPDATE)
  5. データの削除 (DELETE)
  6. 並び替え (ORDER BY)
  7. グループ化 (GROUP BY)
  8. 集計関数 (COUNT, SUM, AVG)
  9. テーブル結合 (JOIN)
  10. サブクエリの使用
  11. ビューの作成と操作
  12. データの重複除去 (DISTINCT)
  13. NULL値の処理
  14. トランザクションの管理
  15. HAVING句
  16. EXISTS句
  17. CASE文
  18. UNION / UNION ALL
  19. LIMIT / OFFSET
  20. COALESCE関数
  21. ALTER TABLE
  22. TRUNCATE TABLE
  23. WITH句 (共通テーブル式, CTE)
  24. WINDOW関数
  25. IN / NOT IN句
  26. JSON関数
  27. FULL OUTER JOIN
  28. INDEXの作成

1. データの選択 (SELECT)

  • 目的: テーブルから特定の列または全列を取得する。
  • 構文:
    SELECT [列名1], [列名2] FROM [テーブル名];
    
  • 使用例: 全ての列を取得。
    SELECT * FROM employees;
    

2. 条件付きデータ取得 (WHERE)

  • 目的: 条件を指定してデータを取得する。
  • 構文:
    SELECT [列名] FROM [テーブル名] WHERE [条件];
    
  • 使用例: 年齢が30以上の従業員を取得。
    SELECT name, age FROM employees WHERE age >= 30;
    

3. データの挿入 (INSERT)

  • 目的: 新しいデータをテーブルに挿入する。
  • 構文:
    INSERT INTO [テーブル名] ([列名1], [列名2]) VALUES ([値1], [値2]);
    
  • 使用例: 新しい従業員を追加。
    INSERT INTO employees (name, age) VALUES ('John Doe', 28);
    

4. データの更新 (UPDATE)

  • 目的: 既存のデータを更新する。
  • 構文:
    UPDATE [テーブル名] SET [列名] = [値] WHERE [条件];
    
  • 使用例: 特定の従業員の年齢を更新。
    UPDATE employees SET age = 29 WHERE name = 'John Doe';
    

5. データの削除 (DELETE)

  • 目的: 条件に一致するデータを削除する。
  • 構文:
    DELETE FROM [テーブル名] WHERE [条件];
    
  • 使用例: 特定の従業員を削除。
    DELETE FROM employees WHERE name = 'John Doe';
    

6. 並び替え (ORDER BY)

  • 目的: データを指定した列で昇順または降順に並び替える。
  • 構文:
    SELECT [列名] FROM [テーブル名] ORDER BY [列名] [ASC|DESC];
    
  • 使用例: 年齢の降順で並び替え。
    SELECT name, age FROM employees ORDER BY age DESC;
    

7. グループ化 (GROUP BY)

  • 目的: データを特定の列でグループ化して集計する。
  • 構文:
    SELECT [列名], [集計関数] FROM [テーブル名] GROUP BY [列名];
    
  • 使用例: 部署ごとの平均給与を計算。
    SELECT department, AVG(salary) FROM employees GROUP BY department;
    

8. 集計関数 (COUNT, SUM, AVG)

  • 目的: データの集計を行う。
  • 構文:
    SELECT [集計関数]([列名]) FROM [テーブル名];
    
  • 使用例: 従業員の合計数を取得。
    SELECT COUNT(*) FROM employees;
    

9. テーブル結合 (JOIN)

  • 目的: 複数のテーブルを関連付けてデータを取得する。
  • 構文:
    SELECT [列名] FROM [テーブル1] INNER JOIN [テーブル2] ON [条件];
    
  • 使用例: 従業員と部署情報を結合。
    SELECT employees.name, departments.name FROM employees INNER JOIN departments ON employees.department_id = departments.id;
    

10. サブクエリの使用

  • 目的: クエリ内で別のクエリを使用する。
  • 構文:
    SELECT [列名] FROM [テーブル名] WHERE [列名] IN (SELECT [列名] FROM [別のテーブル]);
    
  • 使用例: 特定の給与以上の従業員を取得。
    SELECT name FROM employees WHERE salary > (SELECT AVG(salary) FROM employees);
    

11. ビューの作成と操作

  • 目的: クエリ結果を仮想テーブルとして保存し、再利用可能にする。
  • 構文:
    CREATE VIEW [ビュー名] AS [クエリ];
    
  • 使用例: 高収入従業員のビューを作成。
    CREATE VIEW high_salary_employees AS SELECT name, salary FROM employees WHERE salary > 5000;
    

12. データの重複除去 (DISTINCT)

  • 目的: 重複するデータを除外して取得する。
  • 構文:
    SELECT DISTINCT [列名] FROM [テーブル名];
    
  • 使用例: 重複のない部署リストを取得。
    SELECT DISTINCT department FROM employees;
    

13. NULL値の処理

  • 目的: NULL値を考慮してクエリを実行する。
  • 構文:
    SELECT [列名] FROM [テーブル名] WHERE [列名] IS NULL;
    
  • 使用例: 部署が未設定の従業員を取得。
    SELECT name FROM employees WHERE department_id IS NULL;
    

14. トランザクションの管理

  • 目的: 複数の操作を一括して管理し、必要に応じてロールバックする。
  • 構文:
    BEGIN TRANSACTION;
    [SQL操作]
    COMMIT;
    
  • 使用例: データ更新中にエラーが発生した場合のロールバック。
    BEGIN TRANSACTION;
    UPDATE employees SET salary = salary * 1.1 WHERE department = 'Sales';
    ROLLBACK;
    

15. HAVING句

  • 目的: GROUP BY句でグループ化した結果に条件を適用する。
  • 構文:
    SELECT [列名], [集計関数] FROM [テーブル名] GROUP BY [列名] HAVING [条件];
    
  • 使用例: 従業員数が5人以上の部署を取得。
    SELECT department, COUNT(*) AS employee_count FROM employees GROUP BY department HAVING COUNT(*) > 5;
    

16. EXISTS句

  • 目的: サブクエリの結果が存在するかを確認する。
  • 構文:
    SELECT [列名] FROM [テーブル名] WHERE EXISTS (サブクエリ);
    
  • 使用例: プロジェクトを担当している従業員を取得。
    SELECT name FROM employees e WHERE EXISTS (SELECT 1 FROM projects p WHERE p.employee_id = e.id);
    

17. CASE文

  • 目的: 条件に応じて異なる値を返す。
  • 構文:
    SELECT [列名], 
           CASE 
             WHEN [条件1] THEN [値1] 
             WHEN [条件2] THEN [値2] 
             ELSE [値3] 
           END AS [新しい列名]
    FROM [テーブル名];
    
  • 使用例: 給与レベルを表示。
    SELECT name, 
           CASE 
             WHEN salary > 5000 THEN 'High'
             WHEN salary BETWEEN 3000 AND 5000 THEN 'Medium'
             ELSE 'Low'
           END AS salary_level
    FROM employees;
    

18. UNION / UNION ALL

  • 目的: 複数のクエリ結果を結合する。
  • 構文:
    SELECT [列名] FROM [テーブル名1]
    UNION [ALL]
    SELECT [列名] FROM [テーブル名2];
    
  • 使用例: 従業員とマネージャーの名前を結合。
    SELECT name FROM employees
    UNION
    SELECT name FROM managers;
    

19. LIMIT / OFFSET

  • 目的: 結果セットの取得件数や開始位置を制限する。
  • 構文:
    SELECT [列名] FROM [テーブル名] LIMIT [件数] OFFSET [開始位置];
    
  • 使用例: 20件目から10件を取得。
    SELECT * FROM employees LIMIT 10 OFFSET 20;
    

20. COALESCE関数

  • 目的: NULL値をデフォルト値で置き換える。
  • 構文:
    SELECT COALESCE([列名], [デフォルト値]) FROM [テーブル名];
    
  • 使用例: 部署が未設定の従業員に'Default'を表示。
    SELECT name, COALESCE(department, 'Default') AS department
    FROM employees;
    

21. ALTER TABLE

  • 目的: 既存のテーブルを変更する(列の追加、削除、変更など)。
  • 構文:
    ALTER TABLE [テーブル名] ADD COLUMN [列名] [データ型];
    
  • 使用例: 従業員テーブルに電話番号列を追加。
    ALTER TABLE employees ADD COLUMN phone_number VARCHAR(15);
    

22. TRUNCATE TABLE

  • 目的: テーブルの全データを高速に削除する(ログを残さない)。
  • 構文:
    TRUNCATE TABLE [テーブル名];
    
  • 使用例: 従業員テーブルを初期化。
    TRUNCATE TABLE employees;
    

23. WITH句 (共通テーブル式, CTE)

  • 目的: 再利用可能なクエリを一時的に定義する。
  • 構文:
    WITH [名前] AS ([クエリ])
    SELECT [列名] FROM [名前];
    
  • 使用例: 部署ごとの従業員数を計算。
    WITH EmployeeCount AS (
      SELECT department, COUNT(*) AS count
      FROM employees
      GROUP BY department
    )
    SELECT * FROM EmployeeCount WHERE count > 5;
    

24. WINDOW関数

  • 目的: ウィンドウ関数を使ってデータを集計する。
  • 構文:
    SELECT [列名], [ウィンドウ関数] OVER ([ウィンドウ定義]) AS [新しい列名]
    FROM [テーブル名];
    
  • 使用例: 各従業員の給与順位を計算。
    SELECT name, salary, RANK() OVER (ORDER BY salary DESC) AS rank
    FROM employees;
    

25. IN / NOT IN句

  • 目的: 指定した値のリストに一致するかを確認する。
  • 構文:
    SELECT [列名] FROM [テーブル名] WHERE [列名] IN ([値1], [値2], ...);
    
  • 使用例: 特定の部署IDを持つ従業員を取得。
    SELECT name FROM employees WHERE department_id IN (1, 2, 3);
    

26. JSON関数

  • 目的: JSONデータの操作。
  • 構文:
    SELECT json_extract([列名], '[JSONパス]') FROM [テーブル名];
    
  • 使用例: JSON列から特定の値を取得。
    SELECT json_extract(data, '$.name') AS name
    FROM employees;
    

27. FULL OUTER JOIN

  • 目的: 両方のテーブルに存在するすべてのデータを取得。
  • 構文:
    SELECT [列名] FROM [テーブル1] FULL OUTER JOIN [テーブル2] ON [条件];
    
  • 使用例: 従業員と部署情報を完全結合。
    SELECT e.name, d.department_name 
    FROM employees e
    FULL OUTER JOIN departments d
    ON e.department_id = d.id;
    

28. INDEXの作成

  • 目的: クエリのパフォーマンスを向上させるためのインデックス作成。
  • 構文:
    CREATE INDEX [インデックス名] ON [テーブル名] ([列名]);
    
  • 使用例: 従業員名の検索を高速化するインデックスを作成。
    CREATE INDEX idx_employee_name ON employees (name);