AI技能coding
42 次阅读
自然语言转SQL查询生成器
将自然语言问题转换为优化的SQL查询语句,支持数据库架构感知,提供高效准确的查询方案。
AI
触发条件
当用户提问数据库相关问题并附 schema 时调用
## 技能简介
自然语言转SQL查询生成器是一款智能数据库查询转换工具,能够将用户提出的自然语言问题,根据提供的数据库架构信息,自动生成对应的SQL查询语句。该技能具备架构感知能力,能够理解表结构、字段类型和表间关系,生成符合数据库规范的优化查询。
## 核心功能
- **自然语言解析**:准确理解用户意图,提取关键查询条件
- **架构匹配**:基于提供的表结构信息进行字段映射
- **SQL优化**:生成符合最佳实践的查询语句
- **多数据库兼容**:支持主流关系型数据库的SQL语法
## 调用步骤
### 第一步:提供数据库架构
在提问时,需要附带完整的数据库表结构信息,包括:
- 表名及表的中文说明
- 字段名称、数据类型、是否允许为空
- 主键和外键关系
- 索引情况(如有)
### 第二步:描述查询需求
用自然语言清晰描述你想要查询的内容,例如:
- "查找所有订单金额超过10000元的客户名称"
- "统计每个月的销售总额"
- "列出没有完成支付的所有订单"
### 第三步:获取SQL查询
系统将自动分析并生成对应的SQL查询语句,包括SELECT、WHERE、JOIN、GROUP BY等子句。
## 使用示例
**输入架构:**
```
表名: orders (订单表)
- id: INT, 主键
- customer_name: VARCHAR, 客户名称
- amount: DECIMAL, 订单金额
- status: VARCHAR, 订单状态
- created_at: DATETIME, 创建时间
表名: customers (客户表)
- id: INT, 主键
- name: VARCHAR, 姓名
- phone: VARCHAR, 电话
```
**输入需求:** "查询2024年消费总额最高的10位客户,显示他们的姓名和总消费金额"
**生成SQL:**
```sql
SELECT
c.name AS 客户姓名,
SUM(o.amount) AS 总消费金额
FROM orders o
INNER JOIN customers c ON o.customer_name = c.name
WHERE o.created_at >= '2024-01-01'
AND o.created_at < '2025-01-01'
GROUP BY c.id, c.name
ORDER BY 总消费金额 DESC
LIMIT 10;
```
## 注意事项
1. **架构完整性**:提供的数据库架构越完整准确,生成的SQL质量越高
2. **语义明确性**:自然语言描述应尽量明确,避免歧义
3. **性能考量**:生成的SQL默认包含基本优化,大数据量场景建议添加适当索引
4. **安全验证**:生成的查询语句应在测试环境验证后再执行
5. **兼容性说明**:如需特定数据库语法(如MySQL、PostgreSQL),请在需求中说明
## 适用场景
- 快速原型开发阶段的数据查询
- 不熟悉SQL的人员进行数据分析
- 生成查询模板供开发参考
- 文档和报告中的示例SQL生成