跳到主内容
AIHO 2026 全新改版上线
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 需要临时表排序,数据量大时考虑分页