软件测试【面试题】:数据库常问问题

关系型(sql)数据库:
Mysql,连接工具Navicat(一般讲项目用到的是mysql)
oracle,连接工具Plsql

数据库作用:
1.做功能测试,验证功能的实现和准确性(比如:下单后可以去订单表看下是否新增一条数据)
2.构造测试数据,模拟测试场景(比如:查询3个月之前的订单数据,可以直接去数据库添加三个月之前订单数据,去验证功能测试)
3.出现bug,定位问题的时候需要用到(下单后,我的订单列表没有这条订单数据,我们就去去数据库查看是否有这条订单数据,如果没有就是下单没添加数据,如果有可能是接口没有返回数据)
4.做接口测试会去数据库验证接口的准确性。

比如:
M:你之前做测试的时候会用到数据库吗?
W:会的,比如说执行测试用例时,有时需要到数据库验证数据的准确性与完整、
进行bug定位时,有时需要到数据库查看数据的详细信息、
构造某种测试场景时,可以在数据库里直接修改数据,要比使用界面更有效率、
还有接口测试去数据库验证功能的实现。

数据库会哪些语句?
1.基本的增删改查都会(dml)
2.一些特定的语法(去重distinct,模糊查询like,多少之间between,排序order by)
3.会分组查询,多表查询(内连接/左连接/右连接/全连接),子查询(一般放where或者from后面),分页查询

--查询今天的订单数量--
1.使用时间区间查询
select count(*) from order where order_time between '2020-10-20 00:00:00' and '2020-10-20 23:59:59';
2.今天可以用to_days函数:to_days(时间字段名) = to_days(now())
select count(*) from order where to_days(order_time) = to_days(now());

--如果查询用户名老王的订单数据--
select * from order where userid = (select userid from user where username =  '老王')

--查询订单表中user_id重复的记录
select * from 表名 where userid in
(select user_id from 表名 group by user_id having count(*)>=2);


--查询一个班级男女分别有多少人--
select count(*) from student group by sex 

--成绩表,查找出各门成绩都大于80分的学员信息
1.学生表student(id,age,name)
2.课程表c(课程编号,课程名称)
3.选课表sc(id,课程编号,分数)
            1    语文    50
             1    数学    85
             2    英语    90
            2    物理    89
       ...   ...     ...

select * from student where id in
(select id from sc group by id having min(分数)>80)

sql语句语法的执行顺序?
from - where - group by - having - select -order by

oracle和mysql的区别
1.语法区别
        1).时间格式,oracle要用to_date,mysql直接写
        2).别名as,oracle只能用到选择列,表名不能用as,而mysql都可以用(oracle也可以都打空格取别名)
        3).分页查询,mysql用的是limit,oracle用的是rownum(伪行)
2.mysql中小型数据库,oracle大型数据库
3.mysql免费分,oracle商业版
4.Oracle的内存占有量非常大,而mysql非常小


--多表连接有哪些--
内连接(等值连接,inner join)
外连接(左连接 left join/右连接 right join)
全连接(full join)

--解决:左连接数据显示不全的问题(把where换成and)
select * from dept d left join emp e on e.deptno=d.deptno and e.ename='SMITH'

--分页查询--
mysql(使用limit,面试就讲这个)       limit m,n:m代表从下一行开始,n一共查询几行
oracle(使用rownum,然后要用到子查询当表去查)

--数据库的导入导出备份--
使用Navicat自带功能可以操作--如何一次性插入10万条数据--
可以写存储过程,使用while循环插入10万条数据
如下:

#新建一个存储过程,存储名是my()
CREATE PROCEDURE my()
#开始
BEGIN
    #声明变量n是整型,默认从1开始取值 
    DECLARE n int DEFAULT 1;
        #开始while循环,n小于等于100000
        WHILE n<=100000 DO
            #循环执行以下sql语句,引用变量n插入数据,n是从1开始取值
            INSERT INTO `zentao`.`zt_usertpl`(`id`, `account`, `type`, `title`, `content`) VALUES (n, '12', '1', 'aaa', 'aaa');
            #每次循环n的值递增,直到100000
            SET n=n+1;
        #结束循环
        END WHILE;
#结束
END;

#调用
call my();

--你了解过存储过程吗?
有了解过,类似python的自定义函数,其实就是新建一个存储过程名称,把大量的sql语句写在里面,需要用到的时候就直接使用call调用存储过程名称,就会执行存储过程中的sql语句。

--数据库的索引作用是什么?
"索引"就是一本书的目录,提升查询数据的效率
create index 索引名 on 表名(列名);

有更多疑问,或者一起共同学习的朋友可以+V:164344204

  • 0
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值