mcpField
Q
query-builder

query-builder

github.com/clideyデータ・データベース5.0k101 回インストール今日更新
リポジトリ

query-builder について

Query Builder は、自然言語のデータに関する質問を SQL に変換するスキルです。データベースのスキーマを確認してからクエリを生成・実行し、探索的な操作の安全ルールも示します。

主な機能

  1. 01自然言語の条件を SQL に変換
  2. 02事前にテーブル構造と列型を確認
  3. 03絞り込み、結合、集計クエリの生成
  4. 04PostgreSQL、MySQL、SQLite の日付構文を提示
  5. 05探索クエリを制限し、未依頼の書き込みを回避

活用シーン

  1. 01指定期間に登録したユーザーの検索
  2. 02売上に基づく製品や顧客の順位付け
  3. 03顧客ごとの注文数の集計
  4. 04在庫数や金額でのレコード絞り込み

MCP 対応

このスキルの例では WhoDB の `whodb_tables`、`whodb_columns`、`whodb_query` ツールを使用します。入力には、その他の MCP 設定に関する説明はありません。

インストール

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

$npx skills add https://github.com/clidey/whodb --skill query-builder

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

詳細

クエリビルダー

データベーススキーマを使って、自然言語の質問を SQL クエリに変換します。

使用するタイミング

ユーザーから次のような質問があった場合に有効にします。

  • 「先月登録したユーザーをすべて表示して」
  • 「100 ドルを超える注文を探して」
  • 「在庫が少ない商品はどれ?」
  • 「合計購入額が多い上位 10 人の顧客を取得して」

ワークフロー

1. スキーマを確認する

SQL を生成する前に、必ずテーブル構造を確認します。

whodb_tables(connection="...") → Get available tables
whodb_columns(table="relevant_table") → Get column names and types
2. 意図を特定する

自然言語のリクエストを解析します。

  • 対象:どのエンティティですか?(ユーザー、注文、商品)
  • フィルター:どの条件ですか?(先月、> 100 ドル、有効)
  • 集計:件数、合計、平均、最大値、最小値のどれですか?
  • グループ化:どの軸でグループ化しますか?
  • 並べ替え:何で並べ替えますか?昇順ですか、降順ですか?
  • 上限:結果はいくつ必要ですか?
3. スキーマに対応付ける
  • エンティティをテーブル名に対応付けます
  • 属性をカラム名に対応付けます
  • 必要な外部キー結合を特定します
4. SQL を生成する

SQL のベストプラクティスに従ってクエリを作成します。

SELECT columns
FROM table
[JOIN other_table ON condition]
WHERE filters
[GROUP BY columns]
[HAVING aggregate_condition]
ORDER BY column [ASC|DESC]
LIMIT n;
5. 実行して結果を提示する
whodb_query(query="generated SQL")

変換パターン

自然言語SQL パターン
「先週/先月/昨年」WHERE date_col >= DATE_SUB(NOW(), INTERVAL 1 WEEK)
「X より多い」/「X を超える」WHERE col > X
「上位 N 件」ORDER BY col DESC LIMIT N
「いくつ」SELECT COUNT(*)
「合計」/「〜の合計」SELECT SUM(col)
「平均」SELECT AVG(col)
「それぞれ」/「〜ごと」GROUP BY col
「X から Y の間」WHERE col BETWEEN X AND Y
「含む」/「〜のような」WHERE col LIKE '%term%'
「〜で始まる」WHERE col LIKE 'term%'
「空」/「NULL」WHERE col IS NULL
「空ではない」WHERE col IS NOT NULL

データベースごとの日付処理

PostgreSQL
WHERE created_at >= NOW() - INTERVAL '7 days'
WHERE created_at >= DATE_TRUNC('month', CURRENT_DATE)
MySQL
WHERE created_at >= DATE_SUB(NOW(), INTERVAL 7 DAY)
WHERE created_at >= DATE_FORMAT(NOW(), '%Y-%m-01')
SQLite
WHERE created_at >= DATE('now', '-7 days')
WHERE created_at >= DATE('now', 'start of month')

例

「今月登録したユーザーを表示して」
SELECT * FROM users
WHERE created_at >= DATE_TRUNC('month', CURRENT_DATE)
ORDER BY created_at DESC;
「売上上位 5 件の商品を探して」
SELECT p.name, SUM(oi.quantity) as total_sold
FROM products p
JOIN order_items oi ON p.id = oi.product_id
GROUP BY p.id, p.name
ORDER BY total_sold DESC
LIMIT 5;
「顧客ごとの注文数は?」
SELECT customer_id, COUNT(*) as order_count
FROM orders
GROUP BY customer_id
ORDER BY order_count DESC;

安全ルール

  • 調査用のクエリでは必ず LIMIT を使用します(デフォルト:100)
  • 明示的に依頼されない限り、DELETE、UPDATE、DROP は生成しません
  • クエリが大量の結果を返す可能性がある場合は警告します
  • JOIN では読みやすさのためにテーブルエイリアスを使用します

コメント