
软件测试工程师必备 SQL 完整学习笔记摘要SQL 是软件测试工程师的核心基础技能接口测试、数据校验、bug 定位、构造测试数据都离不开 SQL。本文面向测试人员从基础概念、语法分类、常用语句、测试实战场景、注意事项做完整整理适合面试复习、日常工作查阅。标签SQL软件测试MySQL测试工程师接口测试一、SQL 介绍SQLStructured Query Language结构化查询语言是管理和操作关系型数据库的标准语言可以完成数据查询、新增、更新、删除等操作常见如 MySQL 数据库。 对测试工程师的意义我们在前端做下单、注册等操作后端数据库会同步发生变化。测试人员不能只依赖前端页面展示结果可以直接执行 SQL 查询数据库校验底层数据是否符合预期。SQL 语法特征大小写不敏感SELECT和select效果一样行业习惯关键字大写提升可读性。语句结尾分号单行 / 多行书写末尾使用;结束。子句结构化由不同子句组成FROM指定表WHERE指定过滤条件。注释写法-- 单行注释 /* 多行注释 可以写多行内容 */测试工程师的 SQL 使用场景✅ 数据验证核心测试注册功能查询用户表确认用户信息正确插入测试支付流程校验订单表、余额表金额、订单状态。✅ 后端 接口测试接口只返回 “操作成功”但不确定底层数据是否全部落库通过 SQL 查询数据库校验接口完整数据操作结果。✅ 缺陷定位与分析出现 bug 快速区分问题层级如果数据库数据本身错误 → 业务逻辑 / 后端问题如果数据库数据正确前端显示异常 → 前端展示或者接口传输问题✅ 构造测试数据构造很难通过前端操作生成的数据过期订单、特殊状态用户直接使用INSERT、UPDATE语句可以高效、精准地构造这些数据。✅ 数据迁移测试新旧系统切换校验迁移后数据完整性、一致性。SQL通用语法及分类由于数据库管理系统数据库软件功能非常多不仅仅是存储数据还要包含数据的管理、表的管理、库的管理、账户管理、权限管理等等。所以操作数据库的SQL语言也基于功能可以划分为4类分类全称作用测试重点DDL数据定义语言定义数据库、表、字段、索引结构了解一般测试没有权限执行DML数据操作语言对表里数据做新增、删除、修改⭐⭐⭐⭐⭐ 高频造数、改测试数据DQL数据查询语言查询表中记录数据⭐⭐⭐⭐⭐ 日常校验、定位 bug 最常用DCL数据控制语言创建用户、分配权限、管理账号了解DBA 运维负责三、DDL 数据定义语言库、表、索引操作⚠️ 提示生产环境测试账号一般没有 DDL 权限本地练习环境使用。常用关键字SHOW、USE、CREATE、DROP、ALTER数据库操作-- 查看所有数据库 SHOW DATABASES;-- 使用指定数据库 USE 数据库名;-- 创建数据库设置utf8字符集 CREATE DATABASE[IF NOT EXISTS]db_name CHARSET utf8;-- 删除数据库 DROP DATABASE[IF EXISTS]db_name;数据表操作-- 查看当前库下所有表 SHOW TABLES;-- 查看表结构 DESC 表名;-- 删除表 DROP TABLE[IF EXISTS]表名称;-- 创建表示例 CREATE TABLE student(idINT, sn INT COMMENT学号, name VARCHAR(20)COMMENT姓名, qq_mail VARCHAR(20)COMMENTQQ邮箱)COMMENT学生表;-- 修改表添加字段 ALTER TABLE 表名 ADD 字段名 类型(长度)[COMMENT注释];-- 修改字段数据类型 ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度);-- 修改字段名字段类型 ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型(长度)[COMMENT注释];-- 删除字段 ALTER TABLE 表名 DROP 字段名;-- 修改表名 ALTER TABLE 表名 RENAME TO 新表名;3. 索引操作索引相当于书籍目录加快查询速度-- 创建索引 CREATE INDEX idx_username ON users(username);-- 查看表索引 SHOW INDEX FROMusers;-- 删除索引 DROP INDEX idx_username ONusers;四、DML 数据操作语言新增、删除、修改数据测试造测试数据高频使用切记生产环境禁止直接执行 delete/update1. INSERT 插入数据-- 指定列插入 INSERT INTO student(id,sn,name,qq_mail)VALUES(001,2019001,张三,223389546);-- 全列插入值顺序必须和表字段顺序完全对应 INSERT INTO student VALUES(002,2019002,李四,12345678);-- 插入部分字段未赋值字段为NULL INSERT INTO student(id,name)VALUES(003,王五);-- 批量插入多条记录 INSERT INTO student(id,sn,name)VALUES(004,2019004,赵六),(005,2019005,钱七);DELETE 删除数据-- 带条件删除推荐 DELETE FROM 表名 WHERE 列名值;-- 删除表全部数据逐行删除日志会记录 DELETE FROM 表名;-- 清空整张表删除重建表结构速度快 TRUNCATE TABLE 表名;3. UPDATE 更新数据⚠️ 不带 where 条件会修改全表所有行操作前先用 SELECT 校验 where 条件-- 带条件修改实际工作使用 UPDATE 表名 SET 列名值 WHERE 列名值;-- 危险不带条件修改整张表所有记录严禁生产执行 UPDATE 表名 SET 列名值;五、DQL 数据查询语言【测试最高频】查询语法测试校验数据、定位 bug 必学。基础简单查询-- 查询指定列 SELECT id,name FROM student;-- 查询全部列 SELECT * FROM student;-- 设置别名 as可以省略 SELECT pname AS pn FROM product;SELECT p.pname FROM product AS p;-- 查询做运算 SELECT pname, price10 FROM product;条件查询WHERE-- between and 区间查询 SELECT * FROM student WHERE age BETWEEN20AND30;--in在集合内 SELECT * FROM student WHERE age IN(18,22,25);-- is not null 不为空 SELECT * FROM student WHERE english IS NOT NULL;-- distinct 去重 SELECT DISTINCT NAME FROM student;-- like模糊查询 -- % 匹配任意多个字符_匹配单个字符 SELECT * FROM student WHERE NAME LIKE李%;--姓李 SELECT * FROM student WHERE NAME LIKE_英%;--第二个字是英 SELECT * FROM student WHERE NAME LIKE%英%;--名字包含英排序 ORDER BYASC升序默认DESC降序多字段排序前面条件相同时才走后面条件SELECT * FROM person ORDER BY math;--升序 SELECT * FROM person ORDER BY math DESC;--降序 SELECT * FROM person ORDER BY math DESC, english ASC;聚合函数纵向统计count()统计行数max()最大值min()最小值sum()求和avg()平均值SELECT COUNT(*)FROM Employee;SELECT MAX(Age)FROM Employee;SELECT MIN(Age)FROM Employee;SELECT SUM(Salary)FROM Employee;SELECT AVG(Salary)FROM Employee;分组查询 GROUP BYwhere分组前过滤having分组之后过滤having 可以使用聚合函数where 不能-- 按性别分组查询平均分 SELECT sex , AVG(math)FROM student GROUP BY sex;-- 分数大于70再分组分组后组内人数大于2才展示 SELECT sex , AVG(math),COUNT(id)FROM student WHERE math70GROUP BY sex HAVING COUNT(id)2;分页 LIMITMySQL 方言公式开始索引 (页码-1)*每页条数-- 每页3条 SELECT * FROM student LIMIT0,3;--第1页 SELECT * FROM student LIMIT3,3;--第2页 SELECT * FROM student LIMIT6,3;--第3页多表连接查询隐式内连接 whereSELECT t1.name,t1.gender,t2.name FROM emp t1,dept t2 WHERE t1.dept_idt2.id;显式内连接 inner joinSELECT * FROM emp INNER JOIN dept ON emp.dept_iddept.id;左外连接 LEFT JOIN保留左表全部数据匹配不到右表字段为 nullSELECT t1.*,t2.name FROM emp t1 LEFT JOIN dept t2 ON t1.dept_idt2.id;右外连接 RIGHT JOIN保留右表全部数据SELECT * FROM dept t2 RIGHT JOIN emp t1 ON t1.dept_idt2.id;子查询查询嵌套查询-- 标量子查询单行单列 SELECT * FROM emp WHERE emp.salary(SELECT MAX(salary)FROM emp);-- 多行单列子查询配合in SELECT * FROM emp WHERE dept_id IN(SELECTidFROM dept WHERE NAME IN(财务部,市场部));-- 多行多列子查询作为虚拟表 SELECT * FROM dept t1 ,(SELECT * FROM emp WHERE emp.join_date2011-11-11)t2 WHERE t1.idt2.dept_id;六、DCL 权限管理了解一般测试人员不会操作DBA 运维使用。-- 创建用户 CREATEUSERtest_user%IDENTIFIED BYSecurePass123!;-- 删除用户 DROPUSERtest_user%;-- 查询权限 SHOW GRANTS FORtest_user%;-- 授予查询权限 GRANT SELECT ON test_db.* TOtest_user%;-- 回收权限 REVOKE SELECT ON test_db.* FROMtest_user%;七、测试工程师 SQL 最佳实践 注意事项禁止生产直接执行UPDATE/DELETE仅在测试环境执行先 SELECT 校验再 DML 修改写好 where 条件先用 select 确认数据确认无误再 update/delete测试修改数据可以使用事务执行完可以回滚不改动真实数据BEGIN TRANSACTION;-- 这里写update delete测试语句 ROLLBACK;--回滚放弃修改 -- COMMIT;--确认提交修改4.客户端工具推荐DBeaver免费、Navicat、MySQL Workbench语法高亮、可视化结果集提升测试效率八、写在最后对于软件测试岗位✅ DQL 查询语句是重中之重面试高频考点✅ DML 主要用来构造测试数据✅ DDL/DCL 了解概念即可工作中很少会给到权限。掌握 SQL可以让你从只会点点点的手工测试进阶到接口、自动化测试是测开岗位必备基础。版权声明本文为个人学习整理笔记仅供学习参考。