AI技能coding
53 次阅读
SQL 自然语言查询生成器
根据自然语言问题和数据库 schema 自动生成高效优化的 SQL 查询语句,支持多种数据库方言。
AI
触发条件
当用户提问数据库相关问题并附 schema 时调用
## 技能概述 本技能能够将用户以自然语言提出的数据库查询需求,结合提供的数据库 schema 信息,自动生成结构正确、性能优化的 SQL 查询语句。支持 MySQL、PostgreSQL、SQL Server、SQLite 等主流关系型数据库方言。 ## 核心能力 - **自然语言理解**:准确解析用户的中文或英文查询意图 - **Schema 感知**:根据表结构、字段类型、索引信息生成精准查询 - **性能优化**:自动应用最佳实践,如合理利用索引、避免全表扫描、优化 JOIN 顺序 - **多方言支持**:适配不同数据库的语法差异与函数特性 - **结果解释**:提供查询逻辑说明,帮助用户理解 SQL 含义 ## 调用步骤 ### 第一步:提供数据库 Schema 用户需提供表结构信息,建议包含以下内容: - 表名(table_name) - 字段名(column_name)及数据类型 - 主键、外键关联关系 - 可选:索引信息与示例数据 ### 第二步:提出自然语言问题 用自然语言清晰描述查询需求,例如: - "查询上个月注册的用户数量" - "统计每个部门的平均薪资" - "找出购买过但最近 30 天未活跃的客户" ### 第三步:获取并验证 SQL - 检查生成的 SQL 语法与逻辑是否符合预期 - 确认表名、字段名引用准确无误 - 在测试环境执行验证,关注返回结果 ### 第四步:性能调优 通过 EXPLAIN 或 EXPLAIN ANALYZE 分析执行计划,根据实际情况进一步优化,如添加索引、调整 JOIN 顺序或引入分页。 ## 使用示例 **用户输入**: > Schema:users(id, name, created_at, status) > 问题:统计 2024 年每月新增的活跃用户数 **生成 SQL**: ```sql SELECT DATE_FORMAT(created_at, '%Y-%m') AS month, COUNT(*) AS active_user_count FROM users WHERE status = 'active' AND created_at >= '2024-01-01' AND created_at < '2025-01-01' GROUP BY DATE_FORMAT(created_at, '%Y-%m') ORDER BY month; ``` ## 注意事项 - **Schema 必须准确**:错误的表结构信息会导致生成的 SQL 无效,请务必提供真实的数据库结构 - **复杂查询需验证**:多层嵌套、子查询、窗口函数等复杂场景,务必在测试环境验证后再用于生产 - **方言差异**:MySQL 的 DATE_FORMAT、PostgreSQL 的 TO_CHAR 等函数不可混用,需根据实际数据库类型调整 - **敏感数据保护**:避免在查询中暴露密码、手机号等敏感字段,遵循数据安全规范 - **超大数据量**:百万级以上的查询应考虑分页(LIMIT/OFFSET)、缓存或预聚合策略 - **写操作谨慎**:本技能专注于查询生成,对于未经审核的 DELETE、UPDATE、DROP 等写操作需谨慎使用 - **索引建议**:生成 SQL 后可主动询问是否需要推荐索引方案,以进一步提升查询性能