你是否在面试中遇到过关于数据库的笔试题?如何高效地准备这些题目,提升自己的竞争力?本文将为你整理一些经典的数据库笔试题及其答案,助你备战面试。
金三银四马上来了,测试年限较短难免会碰到笔试题,最近就收到一些求职小伙伴反馈过来的数据库笔试题,说不太会做。特意做了下摘录及答案整理,给大家做个分享。如果不想笔试受挫的宝子,一定要牢牢码住!并多多练习!
在求职季节,尤其是金三银四期间,许多测试人员面临数据库相关的笔试题目。掌握常见的数据库笔试题及其解答,对于提升面试通过率至关重要。
在实际面试中,数据库相关的笔试题目常常考察候选人的SQL能力和逻辑思维。通过对经典题目的练习,能够帮助我们更好地理解数据库的应用场景和解决方案。
![](https://i-blog.csdnimg.cn/direct/50773c6e3b7142939b31de69d8a51d85.png)
一、已建立二张学生基本信息表,表的结构如下:
est表
![图片.png](https://i-blog.csdnimg.cn/img_convert/48d13a51ff893ec8ddc2f270b0bb3d2b.png)
test1表
![图片.png](https://i-blog.csdnimg.cn/img_convert/2a063e44d6541d137064650fd81814d3.png)
1)用SQL语句找出是计算机系并籍贯是北京的学生的所有记录
2)用SQL语句把计算机系的学生的department改为信息学院
3)用SQL连接查询找出成绩大于等于75分的学生的no,name, grade,course字段的记录
参考答案:
1)
select * from test where department='计算机系' and place='北京';
2)
UPDATE test SET department='信息学院' WHERE department='计算机系';
3)
select distinct test.no,test.name,test1.grade,test1.course from test,test1 where test.no=test1.no and test1.grade>=75;
二、请按照如下题目要求编写 SQL
部门表 departments(dept_id, dept_name)
员工表 employees(emp_id,emp_name, sex, dept_id, jobs)
薪水表 salary (salary_id, emp_id, money)
问题1、 列出总人数大于 4 的部门编号和该部门人数
问题2、 列出开发部和测试部的职工号,姓名
问题3、 显示工资最高的前 3 名职工的职工号和姓名
问题4、 列出工资在 1000-2000 之间的所有职工姓名
参考答案:
1、
select dept_id, count() as '部门人数' from employees e group by dept_id having count()>4;
2、
select e.emp_id,e.emp_name from employees e inner join departments d on e.dept_id = d.dept_id where d.dept_name in ('开发部','测试部');
3、
select e.emp_id, e.emp_name,s.money from salary s inner join employees e on s.emp_id = e.emp_id order by s.money desc limit 3;
4、
select e.emp_name,s.money from salary s inner join employees e on s.emp_id = e.emp_id where s.money between 1000 and 2000;
三、根据下面Student、StudentScore表编写对应的数据库语句
![图片.png](https://i-blog.csdnimg.cn/img_convert/af21ad9902362266a06d424ecbc4adb4.png)
1、查询平均成绩大于60的学生
2、用多表语句查询ID为1的学生的各科成绩
参考答案:
1、
select Student.* from Student, StudentScore where Student.ID = StudentScore.ID group by StudentScore.ID having avg(StudentScore.Score) > 60;
2、
select Student.ID, Student.name, StudentScore.C#, StudentScore.Score from
Student,StudentScore where Student.ID = StudentScore.ID and Student.ID = 1;
四、表OrderItems如下,按要求完成sql编写
![图片.png](https://i-blog.csdnimg.cn/img_convert/18d1a93c419aab33fcfc335019acdc31.png)
![图片.png](https://i-blog.csdnimg.cn/img_convert/6fc0d514ca13c66d44868f976d686e76.png)
参考答案:
SELECT prod_id, quantity FROM OrderItems WHERE quantity = 100 or prod_id LIKE 'BNBG%' ORDER BY prod_id ASC;
五、SQL基础:student(学生表)、class(班级表)
![图片.png](https://i-blog.csdnimg.cn/img_convert/2cf48d7f9eabe62e37bff4a6262c8053.png)
![图片.png](https://i-blog.csdnimg.cn/img_convert/3b63c7f422b7a0f4fbc99338b9154a6b.png)
![图片.png](https://i-blog.csdnimg.cn/img_convert/49bf20cefb21b5fe1aee59e570d546f5.png)
参考答案:
1、
select class.name as c_Name,student.name,sex,score from student left join class on
student.c_id = class.id where score = (select max(score) from student);
2、
SELECT c.NAME AS C_Name,COUNT(s.Id) AS Rs,AVG(s.Score) AS Score FROM student s JOIN class c
ON s.c_Id=c.Id WHERE c.NAME IN ('一班','二班') GROUP BY c.NAME ORDER BY Score DESC;
六、下图表a的信息,写sql得出图2的信息
![图片.png](https://i-blog.csdnimg.cn/img_convert/520b4aef576946a4984a7dcd7e1fa1cb.png)
从结果可以看出来题目是: 分别查出每年每月的amount值;
SELECT year,
SUM(IF(month='1', amount, 0)) as 'm1',
SUM(IF(month='2', amount, 0)) as 'm2',
SUM(IF(month='3', amount, 0)) as 'm3',
SUM(IF(month='4', amount, 0)) as 'm4'
FROM a
GROUP BY year;
七、企业表、用户表、专属司机表
企业表 t_orgnization: 企业id:org_id、企业名称:org_name,注册时间:created_time
用户表 t_user: 用户id:user_id,登录账号:login_name,密码:pwd,真实姓名:real_name,所属企业id:org_id,注册时间:created_time
专属司机表 t_my_driver: 手机号:mobile_no,司机姓名:name,车牌号:car_percel_no,归属用户id:user_id
表之间的关系: 一个企业下可以注册多个用户,每个用户可以为自己注册多个专属司机
问题1: 查询所属企业id=86639,有真实姓名的用户信息,列出:登录账号,真实姓名,所属企业名称。
问题2: 查询拥有自己专属司机的用户所对应的企业信息,列出企业id,企业名称,注意去重。
参考答案:
1、
SELECT t_user.login_name,t_user.real_name,t_orgnization.org_name FROM t_user LEFT JOIN t_orgnization ON t_orgnization.org_id=t_user.org_id WHERE t_user.org_id=86639 AND t_user.real_name IS NOT NULL;
2、
SELECT DISTINCT t_orgnization.org_id,t_orgnization.org_Name
FROM t_orgnization
LEFT JOIN t_user on t_user.org_id = t_orgnization.org_id
LEFT JOIN t_my_driver on t_my_driver.user_id = t_user.user_id
WHERE t_my_driver.user_id is not null;
八、以下为学生表、课程表、成绩表、教师表
Student(Sid,Sname,Sage,Ssex)学生表
Sid:学号
Sname:学生姓名
Sage:学生年龄
Ssex:学生性别
Course(Cid,Cname,Tid)课程表
Cid:课程编号
Cname:课程名称
Tid:教师编号
Score(Sid,Cid,score)成绩表
Sid:学号
Cid:课程编号
score:成绩
Teacher(Tid,Tname)教师表
Tid:教师编号:
Tname:教师名字
试题1: 查询平均成绩大于60分的同学的学号和平均成绩,成绩保留两位小数
试题2: 查询姓‘章’的老师的个数
试题3: 查询所有同学的学号、姓名、选课数、总成绩
试题4: 查询没有学过“柠檬”老师课的同学的学号、姓名
试题5: 查询“C001”课程比“C002”课程成绩高的所有学生的学号、姓名
试题6: 查询学过“C001”并且也学过编号“C002”课程的同学的学号、姓名
试题7: 查询所有课程成绩小于60的同学的学号、姓名
试题8: 查询没有学全所有课的同学的学号、姓名
试题9: 查询学过“柠檬”老师所教的所有课的同学的学号、姓名
参考答案:
1、
select Sid,ROUND(AVG(score), 2) from Score group by Sid having avg(score)>60;
2、
select count(Tname) from Teacher where Tname like '章%';
3、
select Student.Sid,Student.Sname,count(Score.Cid),sum(Score.score) from Student left join Score on Student.Sid=Score.Sid group by Student.Sname,Student.Sid;
4、
select Sid,Sname from Student where Sid not in (Select Score.Sid from Teacher,Score,Course where Course.Cid = Score.Cid and Course.Tid = Teacher.Tid and Teacher.Tname = '杨幂');
5、
Select a.Sid,a.Sname from Student a
inner join Score b on a.Sid = b.Sid
inner join Score c on a.Sid = c.Sid
where (b.Cid = 'C001'and c.Cid ='C002') and b.score > c.score;
6、
select a.Sid,a.Sname from Student a inner join Score b on a.Sid=b.Sid inner join Score c on a.Sid=c.Sid where (b.Cid='c001' and c.Cid='c002');
7、
select Student.Sid,Student.Sname from Student,Score where Student.Sid = Score.Sid group by Score.Sid having max(Score.score)<60;
8、
SELECT S.Sid ,S.Sname FROM Student S LEFT JOIN Score Sc ON S.Sid=Sc.Sid GROUP BY S.Sid,S.Sname HAVING COUNT(DISTINCT Sc.Cid)< ( SELECT COUNT(*) FROM Course);
9、
SELECT Sid, Sname FROM Student WHERE Sid IN (
SELECT Score.Sid
FROM Score
JOIN Course ON Course.Cid = Score.Cid
JOIN Teacher ON Course.Tid = Teacher.Tid
WHERE Teacher.Tname = '杨幂'
GROUP BY Score.Sid
HAVING COUNT(DISTINCT Course.Cid) = (
SELECT COUNT(*)
FROM Course join Teacher
On Course.Tid = Teacher.Tid where Teacher.Tname = '杨幂'
)
);
随着互联网行业的快速发展,数据库技术在软件测试中的重要性日益凸显。掌握扎实的数据库知识,已成为测试人员必备的技能之一。
通过对经典数据库笔试题的学习和练习,我们可以更好地掌握数据库的核心概念和应用技巧。持续的学习和实践,将为我们的职业发展奠定坚实的基础。
![](https://i-blog.csdnimg.cn/direct/d4569a2fe69f44d6a335531e4b2cca6e.gif)
朱公子的Note: 链接: https://pan.baidu.com/s/18e9vqftC-SuaJm5qCumx8g?pwd=dq7k 提取码: dq7k
谈谈笑笑,跑跑跳跳: 文件过期了
朱公子的Note: 好多人在用!定时抢票省去好多事
橙子Ballen: 好用吗?安装包怎么下