[数据库] 数据库的含义

522 0
Honkers 2026-3-12 03:37:50 来自手机 | 显示全部楼层 |阅读模式

数据库的含义

数据库(Database)是管理和储存数据的库。

常用的数据库有oracle、mysql…

测试人员学习数据库的必要性

  • 数据验证:测试需验证应用与数据库交互的准确性,确保数据增删改查(CRUD)符合预期。
  • 建构数据:使用数据库可以高效模拟大量的测试数据,比如需要测用户有100个订单,可以在数据库直接生成。
  • 缺陷定位:通过直接查询数据库可快速定位数据层问题(如事务未提交、字段类型不符)。

常用SQL语言分类及示例

DDL(数据定义语言)

用于定义或修改数据库、表、列:

  1. 查询所有数据库:show databases;
  2. 创建数据库:create database (if not exists)表名;
  3. 删除数据库:drop database (if exists)表名;
  4. 使用数据库:use 表名;
  5. 创建数据表:create table 表名(字段1 数据类型1, 字段2 数据类型2... 字段n 数据类型n);
  6. 删除数据表:drop table 表名
复制代码

常用的数据类型:

DML(数据操作语言)

用于对数据增加,修改,删除:

  1. INSERT INTO 表名 (字段1,字段2...字段n) VALUES ('值1','值2'...'值n');
  2. UPDATE 表名 SET name = 'Bob' WHERE id = 1;
  3. DELETE FROM 表名 WHERE 列名='值';
复制代码
DQL(数据查询语言)

用于数据查询,分为简单查询、条件查询和高级查询。

select * from 表(where 条件)(group by 列 having 条件)(order by 列 asc/desc)(limit 开始索引,每页条数);

(1)简单查询:
  1. 查询全部列 SELECT * FROM 表名 ;
  2. 查询部分列 SELECT 列名1,列名2 FROM 表名 ;
  3. 列别名 select 列名1 as a,列名2 as b FROM 表名 ;
复制代码
(2)条件查询:

​ 条件运算符

  1. -- 1)查询性别为女,并且年龄小于50的记录
  2. select * from t_student where s_gender ='female' and s_age <50;
  3. -- 2)查询学号为S_1001,或者姓名为liSi的记录
  4. select * from t_student where s_number ='S_1000' or s_name ='liSi';
  5. -- 3)查询学号为S_1001,或者姓名为liSi且性别为female的记录
  6. select * from t_student where s_number ='S_1000' or s_name ='liSi' and s_gender ='female';
  7. select * from t_student where s_number ='S_1000' (or s_name ='liSi' and s_gender ='female');
  8. -- 调整优先级
  9. select * from t_student where (s_number ='S_1000' or s_name ='liSi') and s_gender ='female';
  10. -- 4)查询学号为S_1001,S_1002,S_1003的记录
  11. select * from t_student where s_number ='S_1001' or s_number ='S_1002' or s_number ='S_1003';
  12. -- 用in改造多选一
  13. select * from t_student where s_number in ('S_1001','S_1002','S_1003');
  14. -- 5)查询学号不是S_1001,S_1002,S_1003的记录
  15. select * from t_student where s_number not in ('S_1001','S_1002','S_1003','S_12843245');
  16. select * from t_student where s_number != 'S_1001' and s_number != 'S_1002' and s_number != 'S_1003'and s_number != 'S_12843245';
  17. -- 6)查询年龄为null的记录
  18. select * from t_student where s_age is null;-- 查询null
  19. select * from t_student where s_gender = '';-- 查询空值
  20. -- 7)查询年龄不为null的学生记录
  21. select * from t_student where s_age is not null;-- 查询非null
  22. -- 8)查询年龄在20到40之间的学生记录
  23. select * from t_student where s_age BETWEEN 20 and 40;
  24. select * from t_student where s_age >= 20 and s_age <=40;
复制代码
(3)高级查询:
  1. -- (1)模糊查询 关键词like _代表一个字符,%代表多个或者0个字符
  2. -- 1)查询姓名由5个字母构成的学生记录
  3. select * from t_student where s_name like '_____';
  4. -- 2)查询姓名由5个字母构成,并且第5个字母为“i”的学生记录
  5. select * from t_student where s_name like '____i';
  6. -- 3)查询姓名以“z”开头的学生记录
  7. select * from t_student where s_name like 'z%';
  8. -- 4)查询姓名中第2个字母为“i”的学生记录
  9. select * from t_student where s_name like '_i%';
  10. -- 5)查询姓名中包含“a”字母的学生记录
  11. select * from t_student where s_name like '%a%';
  12. -- (2)排序查询 关键词 order by asc 升序默认 desc 降序 null值列最小的
  13. -- 1)查询所有学生记录,按年龄升序排序
  14. select * from t_student order by s_age asc;
  15. -- 2)查询所有学生记录,按年龄降序排序
  16. select * from t_student order by s_age desc;
  17. -- 拓展 字符 编码 ASCII码 => unicode(万国码)utf-8 所以中文通常排在字母后面
  18. select * from t_student order by s_name desc;
  19. -- 多列排序
  20. select * from t_student order by s_gender , s_age desc;
  21. -- (3)聚合查询 关键词count/max/min/sum/avg
  22. /*
  23. count(列名) 统计数量(一般选用不为nuLL的列)
  24. max(列名) 最大值
  25. min(列名) 最小值
  26. sum(列名) 求和
  27. avg(列名) 平均值 */
  28. -- 1)查询emp表中记录数
  29. select count(*) from emp;
  30. -- 2)查询emp表中有佣金的人数
  31. select count(comm) from emp;
  32. -- 3)查询emp表中月薪大于2500的人数
  33. select count(*) from emp where sal>2500;
  34. -- 4)查询雇员月薪 ,公式为月薪=工资sal+佣金comm
  35. select ename,sal,comm,sal+ifnull(comm,0) from emp;
  36. select sum(sal+ifnull(comm,0)) as '工资+薪水' from emp;
  37. -- 5)统计所有员工平均工资
  38. select avg (sal) from emp;
  39. -- 6)查询最高工资和低工资
  40. select max(sal),min(sal) from emp;
  41. select max(sal) as 最高,min(sal) as 最低,sum(sal) as 总发工资 from emp;
  42. -- (4)分组查询 关键词group by having 过滤
  43. -- 1)查询每个部门员工人数
  44. select deptno from emp group by deptno;
  45. select deptno,count(*) from emp group by deptno;
  46. -- 2)查询每个部门员工工资总额
  47. select deptno,sum(sal+ifnull(comm,0)) from emp group by deptno;
  48. -- 3)查询部门员工工资总额平均工资,且平均工资大于2000,并按照平均工资从低到高排序
  49. select deptno,sum(sal),avg(sal) from emp group by deptno having avg(sal)>2000 order by avg(sal) asc;
  50. -- (5)分页查询 关键词limit 开始的位置页码-1*条数,每页的条数
  51. select * from emp limit 0,2; -- 第一页
  52. select * from emp limit 2,2; -- 第二页
  53. select * from emp limit 4,2; -- 第三页
  54. -- (6)去重操作 关键词DISTINCT
  55. -- 查询公司有哪些岗位?
  56. select distinct job from emp;
  57. -- 反例 去重失败
  58. select distinct * from emp;
  59. -- 分组效率比distinct高
  60. select job from emp group by job;
  61. /*distinct 和分组区别?
  62. 1.分组效率比distinct高
  63. 2.分组可以做聚合,比如排序,合计;但是distinct 不能
  64. */
  65. -- (7)子查询
  66. -- 1)查询部门名称是SALES的员工的编号和姓名
  67. -- 先查询sales部门的编号
  68. select deptno from dept where dname='销售部';
  69. -- 根据编号确定sales员工编号和姓名
  70. select empno,ename from emp where deptno=(select deptno from dept where dname='销售部');
  71. -- 2)查询工资大于BLAKE的员工信息
  72. -- 先找到blake的工资
  73. select sal from emp where ename= 'blake';
  74. -- 再查询比blake工资高的员工信息
  75. select * from emp where sal>(select sal from emp where ename= 'blake');
  76. -- 3)查询有员工工资大于1500的部门信息**`(in 关键字)`**
  77. -- 先找到工资大于1500的员工
  78. select distinct deptno from emp where sal>1500;
  79. -- 再查询这些员工的部门信息
  80. select dname from dept where deptno in (select distinct deptno from emp where sal>1500);
复制代码

简单查询–单纯查看某一列、所有列

条件查询–要对表里的数据做筛选时,in/ between and /like/is null/and /or 大于小于

高级查询:

​ 模糊查询–用于不确定数据的全称时,找相似 like

​ 排序查询–排序 order by 列 asc

​ 聚合查询–需要对数据做计算时,count/max/min/sum/avg 常和分组group by配合使用

​ 分组查询–对数据分组group by ,分组后的条件过滤必须用having

​ 分页查询–只展示某一页的信息 limit

​ 去重查询–需要去掉重复项时 distinct

​ 子查询–两个或者多个表数据要交互/需要分步进行的用嵌套,先找出子集,然后用更大级去套子集。

测试中的高频场景

  • 事务测试:验证COMMIT和ROLLBACK行为。

  • 索引验证:检查索引是否加速查询。

  • 约束测试:如主键冲突、外键约束。

  • 数据一致性:比较应用界面与数据库实际存储是否一致。

    1. 去重查询--需要去掉重复项时 distinct
    复制代码

​ 子查询–两个或者多个表数据要交互/需要分步进行的用嵌套,先找出子集,然后用更大级去套子集。

测试中的高频场景

  • 事务测试:验证COMMIT和ROLLBACK行为。
  • 索引验证:检查索引是否加速查询。
  • 约束测试:如主键冲突、外键约束。
  • 数据一致性:比较应用界面与数据库实际存储是否一致。

掌握数据库操作可显著提升测试覆盖率和效率,尤其在接口测试和数据驱动测试中。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2026 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行