QA 必学 SQL 实战指南:20 个测试场景的查询语法与应用技巧
QA 工程师必备的 SQL 技能完全教学,涵盖资料验证、测试资料准备、Bug 根因排查等 20 个实际测试场景,附可直接套用的 SQL 语法范例。
最后更新:2026-05-24
目录
1. 为什么 QA 一定要学 SQL?
很多 QA 工程师觉得 SQL 是后端的事,跟自己无关。但现实是:每次你需要确认「资料有没有正确写入」「这笔订单的状态对不对」「为什么前端显示跟预期不一样」时,如果不会 SQL,你只能开 ticket 请后端帮查,然后等。会 SQL 的 QA 可以自己直接查,30 秒搞定。
-
测试效率:不需要等后端帮查资料,自己 30 秒就能验证
-
Bug 定位:看到前端异常时,直接查资料库判断是前端 Bug 还是后端 Bug
-
测试资料准备:自己建立和清理测试资料,不依赖其他人
-
回归验证:修 Bug 后直接查资料库确认资料已修正
-
职涯竞争力:会 Sql 的 Qa 在面试和薪资谈判上有明显优势
2. 环境准备:5 分钟开始练习
不需要安装资料库,以下免费工具让你立刻开始练 SQL。
-
线上练习:Sqlfiddle(Sqlfiddle.Com)或 Db Fiddle(Db-Fiddle.Com)——打开浏览器就能写 Sql
-
本地工具:Dbeaver(免费、支援所有主流资料库)——Qa 最推荐的资料库管理工具
-
公司环境:请 Dba 或后端开通测试环境的唯读(Read Only)权限。强调你只需要 Select 权限,不会改资料
-
练习资料库:用 Sqlite 建一个本地练习库,或用公司的 Staging 环境
小提示
- 第一次连公司资料库前,确认你连的是测试环境而非正式环境
- 永远只用 SELECT,不要在正式环境跑 UPDATE/DELETE/INSERT
注意事项
在正式(Production)环境执行 SQL 查询必须经过授权,且只使用 SELECT 语句。误操作 UPDATE 或 DELETE 可能造成资料损坏。如有疑问请先咨询 DBA。
3. 场景 1-5:基础资料验证
QA 最常用的基础查询,用来验证功能测试的结果。
-
场景 1 — 验证资料是否写入:Select * From Orders Where User_Id = 123 Order By Created_At Desc Limit 5; → 确认下单后资料库有没有新增订单
-
场景 2 — 验证栏位值正确性:Select Status, Total_Amount, Payment_Method From Orders Where Order_Id = 'Ord-456'; → 核对订单状态、金额和付款方式是否正确
-
场景 3 — 验证资料删除:Select Count(*) From Users Where Email = '[email protected]'; → 删除帐号后确认资料库中该笔资料已被移除(结果应为 0)
-
场景 4 — 验证资料更新:Select Name, Email, Updated_At From Users Where User_Id = 789; → 修改个人资料后确认资料库中的值已更新
-
场景 5 — 验证唯一性约束:Select Email, Count(*) From Users Group By Email Having Count(*) > 1; → 检查是否有重复的 Email(结果应为空)
4. 场景 6-10:测试资料准备与清理
在测试环境中准备和管理测试资料的 SQL 技巧。
-
场景 6 — 查询可用的测试帐号:Select User_Id, Email, Status From Users Where Email Like 'Test%' And Status = 'Active' Limit 10; → 找到可用的测试帐号
-
场景 7 — 检查测试资料状态:Select Status, Count(*) From Orders Where Created_At > '2026-05-01' Group By Status; → 查看这个月的测试订单分布
-
场景 8 — 找特定条件的测试资料:Select * From Products Where Price Between 100 And 500 And Stock > 0 And Category = 'Electronics' Limit 5; → 找到符合测试条件的商品
-
场景 9 — 确认关联资料完整性:Select O.Order_Id, O.Status, P.Payment_Status From Orders O Left Join Payments P On O.Order_Id = P.Order_Id Where O.Order_Id = 'Ord-456'; → 确认订单和付款资料是否对应
-
场景 10 — 计算测试覆盖的资料量:Select Count(Distinct User_Id) As Tested_Users, Count(Distinct Product_Id) As Tested_Products From Orders Where Created_At > '2026-05-20'; → 统计测试触及了多少用户和商品
5. 场景 11-15:Bug 根因排查
遇到 Bug 时,用 SQL 快速定位问题出在哪一层。
-
场景 11 — 前端 Vs 后端 Bug:Select Actual_Field From Table Where Id = X; → 前端显示 A 但预期是 B,直接查资料库:如果资料库是 A,Bug 在后端;如果资料库是 B,Bug 在前端
-
场景 12 — 排序异常排查:Select * From Products Order By Price Asc Limit 20; → 前端排序不对时,确认资料库的排序逻辑是否正确
-
场景 13 — 分页异常排查:Select Count(*) From Products Where Category = 'Shoes'; → 前端显示总页数不对时,确认资料库的实际笔数
-
场景 14 — 时区相关 Bug:Select Created_At, Created_At At Time Zone 'Asia/Taipei' From Orders Where Order_Id = 'Ord-456'; → 时间显示不正确时,检查资料库储存的时区
-
场景 15 — 金额计算 Bug:Select Unit_Price, Quantity, Unit_Price * Quantity As Expected_Total, Actual_Total From Order_Items Where Order_Id = 'Ord-456'; → 金额不对时,逐项验算
小提示
- 养成习惯:回报 Bug 时附上 SQL 查询结果截图,开发者会更快理解问题
- Bug Report 加上「资料库状态」区块,写明你查到的实际值,比单纯描述更有说服力
6. 场景 16-20:进阶分析与报告
用 SQL 产出有价值的测试分析报告,提升你在团队中的影响力。
-
场景 16 — 统计各状态的资料分布:Select Status, Count(*) As Count, Round(Count(*) * 100.0 / Sum(Count(*)) Over(), 2) As Percentage From Orders Group By Status; → 产出订单状态分布表
-
场景 17 — 找出异常资料:Select * From Orders Where Total_Amount < 0 Or Total_Amount > 1000000; → 找出金额异常的订单(可能的 Bug 或攻击)
-
场景 18 — 时间趋势分析:Select Date(Created_At) As Date, Count(*) As Order_Count From Orders Where Created_At > Current_Date - Interval '7 Days' Group By Date(Created_At) Order By Date; → 分析最近 7 天的订单量趋势
-
场景 19 — Null 值检查:Select Column_Name, Count(*) As Null_Count From Orders Where Column_Name Is Null; → 检查必填栏位是否有漏写(常见的后端 Bug)
-
场景 20 — 效能相关查询:Select Count(*) From Large_Table Where Indexed_Column = 'Value'; → 测试时注意查询时间,太慢可能暗示缺少索引
7. QA 常用 SQL 速查表
把这张表存下来,日常工作随时查阅。
| 操作 | SQL 语法 | QA 用途 |
|---|---|---|
| 查询资料 | SELECT ... FROM ... WHERE ... | 验证测试结果 |
| 计数 | SELECT COUNT(*) FROM ... | 确认资料笔数 |
| 去重计数 | SELECT COUNT(DISTINCT col) FROM ... | 确认不重复的数量 |
| 排序 | ORDER BY col ASC/DESC | 验证排序功能 |
| 分页 | LIMIT n OFFSET m | 验证分页逻辑 |
| 分组统计 | GROUP BY col | 产出分布报告 |
| 条件筛选 | HAVING COUNT(*) > 1 | 找重复资料 |
| 关联查询 | JOIN ... ON ... | 验证跨表关联 |
| NULL 检查 | WHERE col IS NULL | 找缺失资料 |
| 模糊搜寻 | WHERE col LIKE '%keyword%' | 验证搜寻功能 |
8. 学习路线与推荐资源
按以下顺序学习,两周内就能在日常工作中使用 SQL。
-
Week 1:Select、Where、Order By、Limit — 能查资料就够应付 70% 的场景
-
Week 2:Join、Group By、Count/Sum/Avg — 能做关联查询和统计分析
-
Week 3-4:子查询、Case When、日期函式 — 能处理进阶分析
-
推荐练习:Sqlzoo(Sqlzoo.Net)免费互动教学、Leetcode Sql 题目(由易到难)
-
推荐工具:Dbeaver(免费 Gui 工具)、Datagrip(Jetbrains 付费但很强大)
小提示
- 不需要学会所有 SQL 语法。 QA 日常用到的大概只占 SQL 全部功能的 20%,先学这 20% 就够了
- 每次遇到需要查资料的场景,强迫自己用 SQL 查而不是请别人帮查。两周后你就会很熟练
重点整理
- 1 SQL 是 QA 工程师最被低估的技能——能直接查资料库验证结果,不需要等后端帮你查
- 2 本指南涵盖 20 个 QA 实际测试场景的 SQL 语法,可直接复制修改使用
- 3 从基础查询到进阶分析,按 QA 日常工作流程排列,循序渐进
- 4 学会 SQL 的 QA 工程师在 Bug 排查效率上平均提升 3-5 倍
相关懒人包
AI 自动化测试工具完全比较 2026:Testim、mabl、Katalon AI 等 6 大工具评测
2026 年 6 大 AI 自动化测试工具深度比较,涵盖 Testim、mabl、Katalon AI、Applitools、Codium AI、Playwright AI 的功能、价格与适用场景。
AI 驱动的测试报告分析与缺陷预测指南:让数据帮你找到高风险模组
教 QA 团队用 AI 工具分析测试报告、预测高风险模组、自动产出缺陷趋势报告,从被动修 Bug 转为主动预防,附实际工具与操作步骤。
GitHub Copilot 写测试脚本实战指南:QA 用 AI 写 Playwright 和 Selenium 测试
手把手教 QA 工程师用 GitHub Copilot 撰写 Playwright 和 Selenium 自动化测试脚本,含 Prompt 技巧、实际案例、常见陷阱与最佳实践。
一般声明
本站提供之资讯仅供参考,不保证其完整性与正确性。使用者应自行判断资讯之适用性。