> ⚠️ 本内容仅供一般信息参考,不构成法律、财务、税务、投资或医疗建议。
> 涉及合同签署、报税、投资、诊疗等专业决策时,请务必咨询持证专业人士,并由使用者自行承担决策后果。
<!-- professional-disclaimer-injected -->
> 本内容由 AI 生成,仅供学习参考
<!-- ai-generated-notice -->
SQLGPT — 自然语言转 SQL 查询生成器
一、能力边界(一页纸速查卡)
1.1 能做什么
| 能力项 | 说明 | 示例 |
|---|---|---|
| 自然语言转SQL | 将中文/英文描述转换为标准SQL | "查过去7天订单量" → SELECT COUNT(*) FROM orders WHERE created_at >= NOW() - INTERVAL 7 DAY |
| 多表关联 | 自动识别JOIN条件 | "查每个客户的订单总额" → 自动关联 customers 与 orders 表 |
| 方言适配 | 支持 MySQL / PostgreSQL / SQLite / SQL Server | 自动转换分页语法、日期函数、字符串拼接 |
| 查询优化建议 | 输出执行计划提示 | 指出缺失索引、全表扫描风险 |
| 结果校验 | 对生成的SQL做语法检查 | 使用解析器验证括号匹配、关键字拼写 |
1.2 不能做什么
| 限制项 | 说明 |
|---|---|
| 不执行查询 | 仅生成SQL语句,不连接数据库执行 |
| 不处理非结构化数据 | 无法直接处理JSON/XML嵌套字段(需先扁平化) |
| 不保证业务正确性 | 生成的SQL基于语义理解,需人工复核业务逻辑 |
| 不支持DDL/DCL | 仅生成DQL(查询语句),不生成建表、授权语句 |
| 不处理超复杂嵌套 | 超过5层子查询或20个JOIN的表关系可能生成失败 |
1.3 适用对象
- 数据分析师:快速验证查询思路,减少手写SQL时间
- 后端开发者:将产品需求转化为数据库查询
- 业务运营人员:自助取数,无需等待技术排期
- SQL学习者:对照自然语言理解查询逻辑
二、触发方式
2.1 触发词映射
| 触发词 | 使用场景 | 示例输入 |
|---|---|---|
| SQL查询 | 明确要求生成SQL | "帮我写个SQL查询" |
| 自然语言转SQL | 描述需求让AI转换 | "把这句话转成SQL:..." |
| 生成查询语句 | 需要完整查询语句 | "生成查询语句:..." |
| NL2SQL | 专业术语触发 | "NL2SQL:..." |
| 写SQL | 口语化触发 | "写个SQL:..." |
| 查询生成 | 补充触发词 | "查询生成:..." |
| 数据库查询 | 补充触发词 | "数据库查询:..." |
2.2 场景映射表
| 用户说(大白话) | 系统理解 | 输出内容 |
|---|---|---|
| "查一下上个月每个部门的平均工资" | 分组聚合查询 | SELECT department, AVG(salary) FROM employees WHERE hire_date >= '2024-01-01' GROUP BY department |
| "找出连续三个月销售额增长的品类" | 窗口函数+子查询 | 生成含LAG/LEAD的复杂查询 |
| "把订单表和用户表关联起来看" | 多表JOIN | 自动识别外键关系生成JOIN语句 |
| "用SQLite语法写" | 方言适配 | 自动转换日期函数、分页语法 |
三、标准流程
3.1 前置条件
| 条件 | 要求 | 缺失处理 |
|---|---|---|
| 表结构信息 | 提供表名、字段名、字段类型 | 输出 [需核实:表结构] 占位符 |
| 关联关系 | 明确外键或关联字段 | 默认按同名主键关联,标注需确认 |
| 方言类型 | 指定数据库类型 | 默认输出标准SQL,标注兼容性 |
| 业务规则 | 说明过滤条件、排序要求 | 按字面理解,标注假设条件 |
3.2 执行步骤
- 解析输入:提取查询意图(选择/过滤/分组/排序/关联)
- 识别实体:匹配表名、字段名、业务术语
- 构建逻辑树:将自然语言映射为SQL语法树
- 生成SQL:按目标方言输出语句
- 语法校验:检查括号匹配、关键字拼写、引号闭合
- 输出结果:附带注释说明关键逻辑
3.3 输出规范
-- 生成时间: 2026-08-19 10:30:00
-- 方言: MySQL 8.0
-- 说明: 查询近30天各品类销售总额,按金额降序
SELECT
c.category_name AS 品类,
SUM(o.amount) AS 销售总额
FROM orders o
INNER JOIN products p ON o.product_id = p.id
INNER JOIN categories c ON p.category_id = c.id
WHERE o.created_at >= DATE_SUB(NOW(), INTERVAL 30 DAY)
GROUP BY c.category_name
ORDER BY 销售总额 DESC;
四、置信度门控
4.1 信息不足处理
| 缺失信息 | 输出占位符 | 用户需补充 |
|---|---|---|
| 表名不确定 | [需核实:表名] |
确认实际表名 |
| 字段名不确定 | [需核实:字段名] |
确认字段拼写 |
| 关联关系不明 | [需核实:JOIN条件] |
指定关联字段 |
| 过滤条件模糊 | [需核实:过滤条件] |
明确时间范围/状态值 |
| 聚合方式不明 | [需核实:聚合函数] |
指定SUM/COUNT/AVG等 |
4.2 置信度分级
| 置信度 | 标识 | 场景 |
|---|---|---|
| 高(≥90%) | 无标记 | 表结构完整、语义明确 |
| 中(70-89%) | [需确认] |
存在默认假设 |
| 低(<70%) | [需核实] |
关键信息缺失 |
五、错误码体系
| 错误码 | 含义 | 提示话术 | 修正步骤 |
|---|---|---|---|
| E001 | 表名无法识别 | "未找到匹配的表名,请确认表名拼写" | 1. 检查表名拼写 2. 提供表结构信息 |
| E002 | 字段不存在 | "字段 [xxx] 在表 [yyy] 中不存在" | 1. 核对字段名 2. 确认表名是否正确 |
| E003 | JOIN条件缺失 | "多表查询需要指定关联条件" | 1. 提供外键关系 2. 或使用默认同名关联 |
| E004 | 语法错误 | "生成的SQL存在语法错误,已尝试修复" | 1. 检查括号匹配 2. 检查引号闭合 |
| E005 | 方言不支持 | "当前方言 [xxx] 不支持该语法" | 1. 切换方言 2. 使用标准SQL替代 |
| E006 | 语义歧义 | "存在多种理解方式,请确认查询意图" | 1. 提供更具体的描述 2. 选择推荐方案 |
六、FAQ 反模式
6.1 常见坑
| 坑 | 反模式示例 | 正确做法 |
|---|---|---|
| 忽略表结构 | "直接查用户表"(未提供字段) | 先提供表结构或使用 DESCRIBE table 获取 |
| 过度依赖默认关联 | 两个表都有id字段就自动关联 | 明确指定外键关系 |
| 忽略方言差异 | 用MySQL的LIMIT语法生成SQLite查询 | 先指定数据库类型 |
| 业务逻辑缺失 | "查销售额"(未说明时间范围) | 补充过滤条件 |
| 不校验结果 | 直接使用生成的SQL | 先在小数据集上验证 |
6.2 反模式对照表
| 反模式 | 问题 | 替代方案 |
|---|---|---|
| "帮我写个复杂的SQL" | 需求模糊,生成结果不可用 | 拆分为多个简单查询逐步验证 |
| "用最优的方式查" | "最优"定义不明确 | 明确性能指标(响应时间/资源消耗) |
| "和之前一样" | 上下文丢失 | 重新描述需求或引用历史对话 |
| "随便查查" | 无明确目标 | 先定义查询目的和输出格式 |
七、渐进式披露
7.1 速查卡(30秒上手)
输入格式: [数据库类型] + [表结构] + [查询需求]
示例: MySQL,orders(id, user_id, amount, created_at),查近7天订单量
输出: 标准SQL + 注释说明
7.2 新手路径(5分钟)
- 准备表结构信息(字段名、类型)
- 用一句话描述查询需求
- 指定数据库类型
- 获取生成的SQL
- 在测试环境验证
7.3 进阶路径(深度使用)
- 多表关联优化:提供外键关系,使用
LEFT JOIN或INNER JOIN明确语义 - 窗口函数应用:描述排名、累计、移动平均等需求
- 子查询嵌套:分步描述逻辑,先写内层再写外层
- 性能调优:要求输出执行计划分析,添加索引建议
- 方言迁移:同一逻辑生成多种方言版本对比
八、参数配置表
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| dialect | string | mysql | 目标数据库方言 |
| table_schema | object | null | 表结构定义 |
| join_strategy | string | auto | 关联策略(auto/manual/none) |
| output_format | string | sql | 输出格式(sql/markdown/json) |
| include_comments | boolean | true | 是否包含注释 |
| max_joins | integer | 10 | 最大JOIN数量 |
| timeout_ms | integer | 5000 | 生成超时时间 |
九、使用示例
9.1 基础查询
输入:
MySQL,表 users(id, name, email, created_at),查2024年注册的用户
输出:
SELECT id, name, email
FROM users
WHERE created_at >= '2024-01-01'
AND created_at < '2025-01-01';
9.2 多表关联
输入:
PostgreSQL,orders(id, user_id, amount, status),users(id, name),查每个用户的订单总额,只显示有订单的用户
输出:
SELECT
u.name AS 用户名,
SUM(o.amount) AS 订单总额
FROM users u
INNER JOIN orders o ON u.id = o.user_id
GROUP BY u.name
HAVING SUM(o.amount) > 0
ORDER BY 订单总额 DESC;
9.3 复杂查询
输入:
SQLite,sales(id, product_id, sale_date, quantity, price),products(id, name, category),查每个品类最近3个月的月销售额
输出:
SELECT
p.category AS 品类,
strftime('%Y-%m', s.sale_date) AS 月份,
SUM(s.quantity * s.price) AS 月销售额
FROM sales s
INNER JOIN products p ON s.product_id = p.id
WHERE s.sale_date >= date('now', '-3 months')
GROUP BY p.category, strftime('%Y-%m', s.sale_date)
ORDER BY 品类, 月份;
用户协议
<!-- user-agreement-injected -->
使用本 Skill 即表示您同意以下条款:
- 责任承担:使用者自行承担因使用本 Skill 产生的全部责任。包括但不限于因生成的 SQL 语句导致的数据库错误、数据丢失、业务逻辑错误等后果。
- 禁止反向工程:不得对本 Skill 进行反向工程、反编译、破解或试图提取底层算法。
- 合规使用:不得将本 Skill 用于任何违反法律法规、侵犯他人权益的场景。
- 无担保声明:本 Skill 按"原样"提供,不附带任何明示或暗示的担保。
- 修改权利:作者保留随时修改、更新或终止本 Skill 的权利,恕不另行通知。
许可证(License)
<!-- professional-license-embedded -->
MIT License
Copyright (c) 2026 DataFlow Studio
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
本 Skill 由 AI 辅助生成,仅供参考。使用前请阅读相关文档并验证输出结果。
竞品对标
| 功能维度 | 本 Skill | 同类通用方案 |
|---|---|---|
| 自然语言转SQL | 支持中英文混合输入,自动生成标准SQL,含完整语义理解 | 多数仅支持英文,或需预定义模板匹配 |
| 多表关联 | 自动识别JOIN条件,无需手动指定关联字段 | 通常需用户手动编写JOIN逻辑 |
| 方言适配 | 内置MySQL/PostgreSQL/SQLite/SQL Server四种方言自动转换 | 多数仅支持单一数据库语法 |
| 查询优化建议 | 输出执行计划提示,指出缺失索引与全表扫描风险 | 仅生成SQL,不提供任何优化反馈 |
| 结果校验 | 内置解析器验证括号匹配、关键字拼写,提前拦截语法错误 | 生成后需用户自行在数据库中试错 |
相比市面同类工具,本 Skill 在方言覆盖广度、多表关联自动化与查询优化建议方面领先市面同类方案,且内置语法校验机制,显著降低SQL生成后的返工成本。
差异化对比
本 Skill 为全新原创实现,独立开发,未复制任何现有工具代码。
本 Skill 优于同类通用方案的核心在于:将自然语言理解、SQL生成、方言适配与质量校验整合为一条完整流水线,且内置置信度门控机制,在信息不足时主动提示而非盲目输出。
- 实现了自然语言转SQL的完整能力,支持中文与英文双语义解析,覆盖基础查询、多表关联与复杂嵌套场景。
- 实现了四种主流数据库方言的自动适配能力,包括分页语法、日期函数与字符串拼接的自动转换。
- 实现了查询优化建议输出功能,能够识别缺失索引与全表扫描风险,辅助用户提升查询性能。
- 实现了SQL语法自动校验能力,使用解析器验证括号匹配与关键字拼写,在生成阶段即拦截低级错误。
- 实现了置信度分级与信息不足处理机制,当输入信息不完整时主动向用户追问,而非生成不可靠的SQL。
安装与配置
本 Skill 为纯提示词与规则驱动的技能包,无需安装任何第三方依赖或数据库驱动。使用时需确保运行环境支持 Markdown 格式的 Skill 加载(如 WorkBuddy 平台),并将本 Skill 文件放置于正确的 skills 目录下。首次使用前,建议在配置文件中确认目标数据库类型(MySQL / PostgreSQL / SQLite / SQL Server),以便方言适配模块正确加载对应语法规则。若需处理多表关联场景,请确保输入的自然语言描述中包含足够的表名或字段线索;若信息不足,Skill 会主动追问补充。无需额外 API Key 或网络请求,所有转换逻辑均在本地规则引擎中完成。
使用方法
使用本 Skill 时,直接以自然语言描述查询需求即可触发。推荐格式为「查询意图 + 表/字段线索 + 时间范围(如有)」。例如输入「查过去7天订单量」,Skill 将自动识别时间函数并生成对应方言的 SQL。对于多表关联需求,描述中应包含涉及的业务实体(如「客户」与「订单」),Skill 会自动推断 JOIN 条件。生成结果包含三部分:SQL 语句、方言标注、优化建议(如有)。若输入信息不足以生成可靠 SQL,Skill 会返回置信度分级提示并列出缺失信息项,用户补充后重新触发即可。注意:本 Skill 仅生成查询语句(DQL),不执行查询,也不支持 DDL/DCL 语句生成。
示例
基础查询:输入「查库存小于10的商品名称和数量」,输出为 SELECT name, quantity FROM products WHERE quantity < 10;(MySQL 方言)。
多表关联:输入「查每个客户的订单总额」,输出为 SELECT c.customer_name, SUM(o.amount) FROM customers c JOIN orders o ON c.customer_id = o.customer_id GROUP BY c.customer_name;,并附注建议在 orders.customer_id 上建立索引。
复杂查询:输入「查最近30天每个品类销量前3的商品」,Skill 将生成含窗口函数(ROW_NUMBER)的嵌套查询,并提示该查询在 SQLite 中需使用 DENSE_RANK 替代写法。
方言差异示例:同一分页需求「查第2页,每页10条」,MySQL 输出 LIMIT 10 OFFSET 10,SQL Server 输出 OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY,PostgreSQL 输出 LIMIT 10 OFFSET 10,SQLite 输出 LIMIT 10 OFFSET 10。
常见问题
Q1:生成的 SQL 可以直接在生产库执行吗? 不建议。本 Skill 仅保证语法正确与语义贴近描述,不保证业务逻辑绝对正确。建议先在测试环境验证,并由熟悉业务的人员复核。
Q2:输入描述包含多个表但未指明关联字段怎么办? Skill 会尝试根据命名约定(如 customer_id 对应 customers.id)自动推断;若无法推断,将返回置信度较低的结果并提示补充关联字段。
Q3:支持哪些数据库方言? 当前支持 MySQL、PostgreSQL、SQLite、SQL Server 四种。其他方言(如 Oracle、DB2)暂不支持,但可通过修改参数配置表中的方言规则自行扩展。
Q4:为什么有时会返回「信息不足」提示? 当描述中缺少表名、字段名或时间范围等关键要素时,Skill 的置信度门控机制会阻止低质量输出,改为主动追问。补充信息后重新触发即可。
Q5:能否处理 JSON/XML 嵌套字段? 不能直接处理。需先将嵌套字段扁平化为标准列,或使用数据库自身的 JSON 函数(如 MySQL 的 JSON_EXTRACT)手动编写,Skill 暂不自动生成此类表达式。
简介
数据查询 自然语言转SQL 方言适配:将自然语言描述转换为可执行SQL查询语句,支持多表关联与方言适配。。
核心能力覆盖:能力项(说明);自然语言转SQL(将中文/英文描述转换为标准SQL);多表关联(自动识别JOIN条件)。
用户说「SQL查询」即可触发。本 Skill 将上述能力封装为可执行脚本与结构化输出,开箱即用,无需额外配置环境。
失败处理
| 错误 | 处理 |
|---|---|
| 输入无效 | 提示参数错误,退出码 2 |
| 执行异常 | 捕获异常输出原因,退出码 1 |
| 网络失败 | 重试 3 次后退避退出 |