面试题之数据库
- 前言
- 题目
- 数据权限是什么
- 多表联查
- 索引(类型、含义、优缺点)
- 在数据库中批量增加数据
- 找出库中前20条数据的sql语句
- Group by 和having
- Mysql数据库的五大约束
- 揭晓答案
- 权限
- 多表联查
- 索引
- 数据库中批量增加数据
- 找出库中前20条数据的sql语句
- Group by 和having
- Mysql数据库的五大约束
前言
2023年软件测试面试的道路可谓是遥远且艰辛。大数据测试面试时经常会被问到数据库的知识,于是我决定总结下遇到过的数据库面试题。
题目
数据权限是什么
多表联查
索引(类型、含义、优缺点)
在数据库中批量增加数据
找出库中前20条数据的sql语句
Group by 和having
Mysql数据库的五大约束
揭晓答案
(以下也是我通过各种渠道总结的,如有错误,望指正)
权限
权限分为三大方面:
功能权限: 顾名思义,与功能挂钩,可以在最表层选择不同角色可以看到的菜单或者按钮,比如我在测数据填报时可以在后台设置不同管理员对数据填报应用每个模块的可见情况(模板管理、审核分配、成员管理、项目管理、填报管理)
数据权限: 通过控制不同的角色、不同机构的人员(学下、教育局、培训机构)来查看数据的范围
接口权限: 不同角色调用接口的权限,比如有些敏感接口只能指定用户才能调用
多表联查
多表联查分为等值联查、非等值联查。还有补充自然连接。
等值联查:主要包括内连接、外连接(包括左外连接和右外连接)
- 内连接(innner join)
假如有表A和表B,内连接就是取交集。
例如:
select * from A inner join B on A.aid=B.bid
//其实等同于 select * from A,B where A.aid=B.bid
- 左外连接
假如有表A和表B,左外连接就是取左表的所有记录,如果对应右表没有数据的话,就返回null
select * from A left join B on A.aid=B.bid
- 右外连接
假如有表A和表B,右外连接就是取右表的所有记录,如果对应左表没有数据的话,就返回null
select * from A right join B on A.aid=B.bid
其中面试官还问了左右连接分别适用于什么场景,如果把A,B表换一下位置,岂不是左右连接都一样了,目前我还没得到解决。
非等值联查:就是笛卡尔积的应用,表A如果有N行,表B有M行,则查询结果为N*M行
- 自然连接
自然连接要求连接的这两张表,必须有一行相同的属性列(列名相同),无需设置条件就能连接,比如两张表都有id的列
select * from A natural join B
索引
含义: 类似于目录,是一种数据结构,是一个文件
类型: 普通索引、唯一索引(允许空值)、主键索引(不允许空值)
优点: 大大加快数据的检索速度
缺点: 占用物理空间;创建索引需要花费时间,并且表中数据增删改时,索引也要动态变化
数据库中批量增加数据
这个貌似要先连接数据库,JDBC,然后再编写代码循环增加数据
不太清楚答案
找出库中前20条数据的sql语句
SELECT * from doctor where id BETWEEN 1 and 21
Group by 和having
having跟在Group by后面,having后面加的是聚合函数,用于分组后筛选
where后面不能加聚合函数,用于分组前的条件过滤
Mysql数据库的五大约束
默认约束:default
非空约束:not null
唯一约束:unique
主键约束:primary key
外键约束:foreign key,用于两个表进行连接
creat A(
id int(11) primary key,
name varchar(11) not null,
sex varchar(2) unique,
age varchar(6) ,
foreign key(name) reference B(name)
);