mcpField
S
sql-ops

sql-ops

github.com/0xdarkmatterデータ・データベース7838 回インストール2 週間前に更新
リポジトリ

sql-ops について

sql-opsは、SQLを扱う人向けのパターン速引きスキルです。クエリ構造、インデックス、トランザクションに加え、よくあるアンチパターンと対処法もまとめています。

主な機能

  1. 01CTEと連結クエリの例
  2. 02ウィンドウ関数の早見表
  3. 03JOINタイプの参照
  4. 04ページネーションと分離レベルの解説
  5. 05インデックスの種類とアンチパターン対策

活用シーン

  1. 01複数段階のクエリ作成
  2. 02順位や累積値の分析
  3. 03ページネーションやインデックス方式の選択
  4. 04よくあるSQLの誤りの確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/0xdarkmatter/claude-mods --skill sql-ops

インストール後、Claude Code で/sql-opsを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

assets/
.gitkeep
references/
indexing-strategies.md
window-functions.md
scripts/
.gitkeep

詳細

SQL パターン

よく使われる SQL パターンのクイックリファレンスです。

CTE(共通テーブル式)

WITH active_users AS (
    SELECT id, name, email
    FROM users
    WHERE status = 'active'
)
SELECT * FROM active_users WHERE created_at > '2024-01-01';
連鎖する CTE
WITH
    active_users AS (
        SELECT id, name FROM users WHERE status = 'active'
    ),
    user_orders AS (
        SELECT user_id, COUNT(*) as order_count
        FROM orders GROUP BY user_id
    )
SELECT u.name, COALESCE(o.order_count, 0) as orders
FROM active_users u
LEFT JOIN user_orders o ON u.id = o.user_id;

ウィンドウ関数(クイックリファレンス)

関数用途
ROW_NUMBER()重複のない連番を付与
RANK()順位を付与し、同順位の後に順位を飛ばします(1、2、2、4)
DENSE_RANK()順位を付与し、同順位の後も順位を飛ばしません(1、2、2、3)
LAG(col, n)前の行の値
LEAD(col, n)次の行の値
SUM() OVER累計
AVG() OVER移動平均
SELECT
    date,
    revenue,
    LAG(revenue, 1) OVER (ORDER BY date) as prev_day,
    SUM(revenue) OVER (ORDER BY date) as running_total
FROM daily_sales;

JOIN リファレンス

種類返される行
INNER JOIN一致する行のみ
LEFT JOIN左側のすべての行と、一致する右側の行
RIGHT JOIN右側のすべての行と、一致する左側の行
FULL JOINすべての行。一致しない場合は NULL

ページネーション

-- OFFSET/LIMIT (simple, slow for large offsets)
SELECT * FROM products ORDER BY id LIMIT 20 OFFSET 40;

-- Keyset (fast, scalable)
SELECT * FROM products WHERE id > 42 ORDER BY id LIMIT 20;

トランザクション分離レベル

レベルダーティリード非反復読み取りファントムリード用途
READ UNCOMMITTED発生する可能性あり発生する可能性あり発生する可能性ありまれ(PostgreSQL では READ COMMITTED として扱われます)
READ COMMITTEDなし発生する可能性あり発生する可能性ありほとんどのデータベースのデフォルト
REPEATABLE READなしなし発生する可能性あり*複数のステートメントにわたる一貫した読み取り
SERIALIZABLEなしなしなし重要な不変条件(シリアライズ失敗時は再試行)

*PostgreSQL の REPEATABLE READ は、スナップショット分離によってファントムリードも防ぎます。

BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;
-- ... critical operations ...
COMMIT;  -- be prepared to retry on serialization failure

デフォルトの READ COMMITTED を全体に適用し、ロジック上必要な場合に限り、トランザクション単位でレベルを引き上げてください。

インデックスのクイックリファレンス

インデックスの種類最適な用途
B-tree範囲検索、ORDER BY
Hash完全一致のみ
GIN配列、JSONB、全文検索
カバリングテーブル検索の回避

アンチパターン

間違い修正方法
SELECT *列を明示的に指定する
WHERE YEAR(date) = 2024WHERE date >= '2024-01-01'
NULL を含む NOT INNOT EXISTS を使う
N+1 クエリJOIN またはバッチ処理を使う

追加リソース

詳しいパターンについては、以下を読み込んでください。

  • ./references/window-functions.md - ウィンドウ関数パターンの完全なリファレンス
  • ./references/indexing-strategies.md - インデックスの種類、カバリングインデックス、最適化

コメント