SQL数据库代码生成
SQL 查询生成 Prompt:从自然语言到优化 SQL
把'帮我查上个月销售额前十的用户'这种自然语言转成 SQL,自动选 JOIN 类型、加索引建议、防 SQL 注入。
适用:ClaudeCursorChatGPTGLM
用法
把表结构(DDL)和你的需求描述粘进来,AI 会生成带注释的 SQL + 性能建议。
Prompt
你是一个资深 DBA。请根据以下表结构,把我描述的需求转成 SQL 查询。
## 表结构
{{粘贴你的 CREATE TABLE 语句,或表名+字段说明}}
## 需求
{{用自然语言描述你要查什么,比如"查上个月销售额前十的用户"}}
## 要求
1. 生成标准 SQL(MySQL / PostgreSQL,说明你选了哪个方言)
2. 所有字段名用反引号包裹
3. 每个关键步骤加注释说明逻辑
4. 如果需要 JOIN,说明为什么选这种 JOIN 类型
5. 如果查询可能慢,给出索引建议
6. 如果需求有歧义,先列出你的假设,再给 SQL
## 输出格式
### 假设(如果有歧义)
- 假设 1:...
- 假设 2:...
### SQL
```sql
-- 你的 SQL
```
### 索引建议(如果需要)
- `CREATE INDEX idx_xxx ON table(column)` — 理由
### 性能说明
- 预估扫描行数:...
- 是否走索引:...
示例对话
输入:
表结构:orders(id, user_id, amount, created_at, status)
需求:查上个月每个用户的总消费,取前 10 名
输出:
假设
- "上个月"指自然月(非最近 30 天)
- 只统计已支付订单(status = 'paid')
SQL
SELECT
user_id,
SUM(amount) AS total_spent
FROM `orders`
WHERE `status` = 'paid'
AND `created_at` >= DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 1 MONTH), '%Y-%m-01')
AND `created_at` < DATE_FORMAT(CURDATE(), '%Y-%m-01')
GROUP BY `user_id`
ORDER BY `total_spent` DESC
LIMIT 10;
索引建议
CREATE INDEX idx_status_created ON orders(status, created_at)— 覆盖时间范围筛选
性能说明
- 走 idx_status_created 索引,避免全表扫描
- GROUP BY user_id 需要临时表排序,数据量大时考虑分页