☰
SQL常用语句介绍
2026/10/23 8:38:34 网站建设 项目流程

软件测试工程师必备 SQL 完整学习笔记

摘要:SQL 是软件测试工程师的核心基础技能,接口测试、数据校验、bug 定位、构造测试数据都离不开 SQL。本文面向测试人员,从基础概念、语法分类、常用语句、测试实战场景、注意事项做完整整理,适合面试复习、日常工作查阅。
标签:SQL软件测试MySQL测试工程师接口测试

一、SQL 介绍

SQL(Structured Query Language,结构化查询语言),是管理和操作关系型数据库的标准语言,可以完成数据查询、新增、更新、删除等操作,常见如 MySQL 数据库。

🧪 对测试工程师的意义

我们在前端做下单、注册等操作,后端数据库会同步发生变化。
测试人员不能只依赖前端页面展示结果,可以直接执行 SQL 查询数据库,校验底层数据是否符合预期。

SQL 语法特征

  1. 大小写不敏感:SELECT和select效果一样;行业习惯关键字大写提升可读性。
  2. 语句结尾分号:单行 / 多行书写,末尾使用;结束。
  3. 子句结构化:由不同子句组成,FROM指定表,WHERE指定过滤条件。
  4. 注释写法
-- 单行注释 /* 多行注释 可以写多行内容 */

测试工程师的 SQL 使用场景

  1. ✅ 数据验证(核心)
    测试注册功能,查询用户表确认用户信息正确插入;测试支付流程,校验订单表、余额表金额、订单状态。
  2. ✅ 后端 & 接口测试
    接口只返回 “操作成功”,但不确定底层数据是否全部落库;通过 SQL 查询数据库,校验接口完整数据操作结果。
  3. ✅ 缺陷定位与分析
    出现 bug 快速区分问题层级:
  • 如果数据库数据本身错误 → 业务逻辑 / 后端问题
  • 如果数据库数据正确,前端显示异常 → 前端展示或者接口传输问题
  1. ✅ 构造测试数据
    构造很难通过前端操作生成的数据:过期订单、特殊状态用户,直接使用INSERT、UPDATE语句可以高效、精准地构造这些数据。
  2. ✅ 数据迁移测试
    新旧系统切换,校验迁移后数据完整性、一致性。

SQL通用语法及分类
由于数据库管理系统(数据库软件)功能非常多,不仅仅是存储数据,还要包含:数据的管理、表的管理、库的管理、账户管理、权限管理等等。
所以,操作数据库的SQL语言,也基于功能,可以划分为4类:

分类全称作用测试重点
DDL数据定义语言定义数据库、表、字段、索引结构了解,一般测试没有权限执行
DML数据操作语言对表里数据做新增、删除、修改⭐⭐⭐⭐⭐ 高频造数、改测试数据
DQL数据查询语言查询表中记录数据⭐⭐⭐⭐⭐ 日常校验、定位 bug 最常用
DCL数据控制语言创建用户、分配权限、管理账号了解,DBA 运维负责

三、DDL 数据定义语言(库、表、索引操作)

⚠️ 提示:生产环境测试账号一般没有 DDL 权限,本地练习环境使用。
常用关键字:SHOW、USE、CREATE、DROP、ALTER

  1. 数据库操作
-- 查看所有数据库 SHOW DATABASES;-- 使用指定数据库 USE 数据库名;-- 创建数据库,设置utf8字符集 CREATE DATABASE[IF NOT EXISTS]db_name CHARSET utf8;-- 删除数据库 DROP DATABASE[IF EXISTS]db_name;
  1. 数据表操作
-- 查看当前库下所有表 SHOW TABLES;-- 查看表结构 DESC 表名;-- 删除表 DROP TABLE[IF EXISTS]表名称;-- 创建表示例 CREATE TABLE student(idINT, sn INT COMMENT'学号', name VARCHAR(20)COMMENT'姓名', qq_mail VARCHAR(20)COMMENT'QQ邮箱')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/update

1. 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,'钱七');
  1. 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, price+10 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 BY

ASC升序(默认),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 BY

where分组前过滤;having分组之后过滤,having 可以使用聚合函数,where 不能

-- 按性别分组,查询平均分 SELECT sex , AVG(math)FROM student GROUP BY sex;-- 分数大于70再分组,分组后组内人数大于2才展示 SELECT sex , AVG(math),COUNT(id)FROM student WHERE math>70GROUP BY sex HAVING COUNT(id)>2;

分页 LIMIT(MySQL 方言)

公式:开始索引 = (页码-1)*每页条数

-- 每页3条 SELECT * FROM student LIMIT0,3;--第1页 SELECT * FROM student LIMIT3,3;--第2页 SELECT * FROM student LIMIT6,3;--第3页

多表连接查询

隐式内连接 where
SELECT t1.name,t1.gender,t2.name FROM emp t1,dept t2 WHERE t1.dept_id=t2.id;
显式内连接 inner join
SELECT * FROM emp INNER JOIN dept ON emp.dept_id=dept.id;
左外连接 LEFT JOIN

保留左表全部数据,匹配不到右表字段为 null

SELECT t1.*,t2.name FROM emp t1 LEFT JOIN dept t2 ON t1.dept_id=t2.id;
右外连接 RIGHT JOIN

保留右表全部数据

SELECT * FROM dept t2 RIGHT JOIN emp t1 ON t1.dept_id=t2.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_date>'2011-11-11')t2 WHERE t1.id=t2.dept_id;

六、DCL 权限管理(了解)

一般测试人员不会操作,DBA 运维使用。

-- 创建用户 CREATEUSER'test_user'@'%'IDENTIFIED BY'SecurePass123!';-- 删除用户 DROPUSER'test_user'@'%';-- 查询权限 SHOW GRANTS FOR'test_user'@'%';-- 授予查询权限 GRANT SELECT ON test_db.* TO'test_user'@'%';-- 回收权限 REVOKE SELECT ON test_db.* FROM'test_user'@'%';

七、测试工程师 SQL 最佳实践 & 注意事项

  1. 禁止生产直接执行UPDATE/DELETE,仅在测试环境执行;
  2. 先 SELECT 校验,再 DML 修改:写好 where 条件先用 select 确认数据,确认无误再 update/delete;
  3. 测试修改数据可以使用事务,执行完可以回滚不改动真实数据
BEGIN TRANSACTION;-- 这里写update delete测试语句 ROLLBACK;--回滚,放弃修改 -- COMMIT;--确认提交修改

4.客户端工具推荐:DBeaver(免费)、Navicat、MySQL Workbench,语法高亮、可视化结果集,提升测试效率

八、写在最后

对于软件测试岗位:
✅ DQL 查询语句是重中之重,面试高频考点;
✅ DML 主要用来构造测试数据;
✅ DDL/DCL 了解概念即可,工作中很少会给到权限。

掌握 SQL,可以让你从只会点点点的手工测试,进阶到接口、自动化测试,是测开岗位必备基础。

版权声明:本文为个人学习整理笔记,仅供学习参考。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询