程序员用 AI 写 SQL 查询:提示词与 SQL 示例
作为每天写业务代码、修线上问题、参加评审的后端或全栈开发,你可能也有同感:真正写代码的时间常被排查问题、写文档和同步进度挤占,很多重复性的文字和样板代码其实可以交给 AI 起草。很多人知道要查什么数据,但写 SQL 时卡在关联、分组和窗口函数上。本文给出程序员用 AI 写 SQL 查询的一套可直接照抄的做法:提供表结构和字段含义,用自然语言描述需求,让 AI 写 SQL 并解释每一步,再用小范围数据验证。
场景:程序员为什么需要 AI 写 SQL 查询
程序员需要从数据库里查“接口调用记录”相关的数据:按服务名统计最近一个月的耗时毫秒,还要和上个月对比。数据团队排期很满,自己写 SQL 又总是出错。而且程序员手上通常同时压着“上线订单服务灰度”之类的事情,如果每次都从零开始,很容易顾此失彼。
推荐工具
可以用 ChatGPT、Claude、DeepSeek 等对话助手,也可以用数据库客户端或 BI 工具内置的 AI 查询功能(如 DataGrip、DBeaver 的 AI 助手,以及不少 BI 平台的自然语言查询)。
编辑器里的编程助手(GitHub Copilot、通义灵码等)在写 SQL 文件时可以直接补全;对话助手适合解释复杂查询。
案例:一次完整的使用过程(虚构)
先看一个虚构但很典型的例子。小孙是一位每天写业务代码、修线上问题、参加评审的后端或全栈开发,这周手头的事情包括“完成订单服务接口重构,接口平均响应从约 300ms 降到 120ms 左右(以压测为准)”和“排查定时任务重复执行问题”,偏偏这时又需要写 SQL 查询。小孙没有从空白页开始,而是先花几分钟把相关材料整理好,按下面的提示词交给 AI,拿到初稿后对照原始资料逐条核对,再补上自己的判断。整个过程中,小孙特别留意不把密钥、内网地址、数据库连接串和用户数据放进对话里。
操作步骤
- 提供表名、字段名、字段类型和含义,不需要真实数据
- 说明数据库类型,例如 MySQL 8 或 PostgreSQL
- 用自然语言描述需求,最好附上期望结果的样子
- 让 AI 解释 SQL 的每个部分
- 先加 LIMIT 在测试库或小范围运行,核对结果
可复用的提示词
下面的提示词可以直接复制,按程序员的实际情况替换细节:
【背景】当前的难点是:依赖的第三方支付 SDK 下周升级,可能需要适配。
数据库:MySQL 8.0
表 records(接口调用记录),字段:
- id:主键
- category:服务名,文本
- record_date:调用日期,DATE
- amount:耗时毫秒,数值
- type:错误码,文本
需求:
1. 统计 2026 年 10 月每个 category 的 amount 合计和记录数
2. 同时给出 9 月的合计,以及环比变化百分比
3. 按 10 月合计从高到低排序
请写出 SQL,并逐段解释;如果 9 月没有数据,环比显示为 NULL。
AI 输出示例(示意)
下面是演示用的输出示例,其中的人名、数字和事项均为虚构,实际使用时请以你自己的资料为准:
WITH m AS ( SELECT category, SUM(CASE WHEN record_date >= '2026-10-01' AND record_date < '2026-11-01' THEN amount END) AS oct_total, COUNT(CASE WHEN record_date >= '2026-10-01' AND record_date < '2026-11-01' THEN 1 END) AS oct_cnt, SUM(CASE WHEN record_date >= '2026-09-01' AND record_date < '2026-10-01' THEN amount END) AS sep_total FROM records WHERE record_date >= '2026-09-01' AND record_date < '2026-11-01' GROUP BY category ) SELECT category, oct_total, oct_cnt, sep_total, ROUND((oct_total - sep_total) / NULLIF(sep_total, 0) * 100, 1) AS mom_pct FROM m ORDER BY oct_total DESC;解释:先用条件聚合一次算出两个月的数据,NULLIF 避免除以 0,WHERE 限定时间范围以利用日期索引。
这样的输出只是起点。真正用到“完成订单服务接口重构,接口平均响应从约 300ms 降到 120ms 左右(以压测为准)”这类工作里之前,还需要对照原始资料逐条检查,并补上 AI 不知道的背景。
实用技巧与常见坑
- 表结构描述越准确,SQL 越可用;字段含义不清时 AI 会猜。
- 不同数据库的语法有差异,一定说明数据库类型和版本。
- AI 不知道你们的业务口径(比如是否剔除退款),要在需求中写明。
给程序员的特别提醒
把报错堆栈、相关代码片段和运行环境版本一起贴给 AI,比只描述现象有效得多。还有一点很关键:AI 生成的代码必须经过本地运行、测试和代码评审,不要直接合入主干。
还可以这样用
- 转换方言:把 MySQL 语句改写成 PostgreSQL 或其他数据库的写法。
- 生成测试数据:让 AI 写插入语句,构造用于验证的样例数据。