文章目录

  • 测试开发面经(四)数据库
    • 一、SQL代码题
      • 1.创建数据库
      • 2.在 edu 数据库里创建一个架构,架构名字为自己名字的汉语拼音。
      • 3.在创建的架构中,创建如下表:
      • 4.建立、删除索引
      • 5.插入数据
      • 6. SQL查询
        • 查询所有没有选课的学生学号(左外连接)
        • 13)查询在 c201 教室上课的教师编号 、姓名(左外连接)
        • 15)查询学生成绩在 60-90 分的学生的学号和课程号 (多表连接)
        • 17)查询在教学楼 C 座上课的教师的编号(模糊查询)
        • 18)查询有先行课的课程编号及课程名
        • 20)查询姓名为 3 个字,前两个字为‘上官’的学生学号和姓名(模糊查询)
        • 22)查询学号为‘20101001’的学生选修的课程号及成绩,结果按成绩升序排 列 (升序排序)
        • 28)查询选课人数超过 5 人的课程编号 (having)
        • 29)查询所有学生的基本信息以及所在学院的名称和学院联系电话
        • 32-67 要求至少使用两种方式查询(对复杂查询,可以建立视图)
        • 32)查询至多有两名男生的班级
        • 35).查询每门课程及其被选修的人数

接受不想干活的事实,然后把活干到极致。

测试开发面经(四)数据库

一、SQL代码题

1.创建数据库

create database edu;

2.在 edu 数据库里创建一个架构,架构名字为自己名字的汉语拼音。

​ 一个数据库可以有多个模式,一个模式下通常包括多个表、视图和索引。模式实际上是一个名字的空间,sunnygao.student与sunnyxin.student是不同的对象。

use edu; ## 改变当前的数据库
create schema sunnygao authorization gao;

3.在创建的架构中,创建如下表:

student

DROP TABLE IF EXISTS `student`;
create table student(
sno char (8) comment'学生学号',/*学生学号*/
sname char (8) not null comment'学生姓名',/*学生姓名*/
sex char (2) comment'学生性别',
native char (20) comment '籍贯',
brithday datetime comment '学生出生日期',
pno char (4) comment'专业号',
dno char (6) comment '6',
classno char(4) comment '班级号',
entime datetime comment '学生的入校时间',
home varchar (40) comment'学生家庭住址',
tel varchar (40) comment'学生联系电话',
primary key (sno)
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;

course

DROP TABLE IF EXISTS `course`;
CREATE TABLE `course` (`cno` char(10) NOT NULL COMMENT '课程编号',`cname` char(20) NOT NULL DEFAULT '' COMMENT '课程名称',`cpno` char(10) DEFAULT '' COMMENT '先修课',`experiment` tinyint DEFAULT NULL COMMENT '实验时',`lecture` tinyint DEFAULT NULL COMMENT '授课学时',`semester` tinyint DEFAULT NULL COMMENT '开课学期',`credit` tinyint DEFAULT NULL COMMENT '课程学分',PRIMARY KEY (`cno`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;

student_course

create table student_course(
sno char(8) not null,
cno char (10) not null,
score tinyint ,
primary key (sno,cno)
);

department (院系信息表)

create table department(dno char(6) not null,dname char(8) not null,dhome varchar(40),dzipcode char(6),dtel varchar(40),primary key(dno)
);

teacher

create table teacher(tno char(8) not null,tname char(8) not null,sex char(2),birthday datetime,dno char(6),pno varchar(20),home varchar(40),zipcode char(6),tel varchar(40),email varchar(40),primary key(tno)
);

teacher_course表

create table teacher_course(tcid smallint not null,tno char(8),classno char(4),cno char(10),semester char(6),schoolyear char(10),classtime varchar(40),classroom varchar(40),weektime tinyint,primary key(tcid),foreign key(tno) references teacher(tno),foreign key(cno) references course(cno)
);

4.建立、删除索引

(1)在 student 表的 sname 列建立唯一降序索引;

create unique index name_desc on student(sname desc);

(2)在 course 表的 credit 列上建立升序索引;

create index credit_asc on course(credit asc);

(3)在 student_course 表的 sno 列上建立聚集索引。

create cluster index sno_cluster on student_course(sno);
### 会报错 一般会默认主键为聚簇索引
create index sno_cluster on student_course(sno);

(4)在 student_course 表上,以学号升序,学号相同按课程号降序建立索引;

create index asc_cno on student_course(sno asc,cno desc);

(5)在 teacher 表的 tno 列上建立聚集升序索引。

create index tno_asc on teacher(tno asc);

(6)将 student_course 表的 sno 列上的聚集索引删掉。

drop index asc_cno on student_course;

5.插入数据

insert into student
values('20101001','张三','男','河北沧州','1989-03-15','2','1','2','2010-9-1','河北省沧州市',null),('20101002','张强','男','河北邢台','1990-05-01','2','1','2','2010-9-1','河北省邢台市','13145322345'),('20101003','张小兵','男','山东济南','1989-03-15','1','2','4','2010-9-1','河北省沧州市',null),('20101004','李燕','男','山东济南','1989-03-15','1','1','2','2010-9-1','山东济南','15194598762'),('20101005','李晓','男','山东德州','1989-03-15','2','2','2','2010-9-1','山东德州',null),('20101006','上官青','女','陕西西安','1989-03-15','3','4','2','2010-9-1','陕西西安','15192598762'),('20101007','李晓芳','女','陕西西安','1989-03-15','3','3','3','2010-9-1','陕西西安',null),('20101008','上官文宏','女','北京市','1989-03-15','2','2','2','2010-9-1','北京市','15194598232'),('20101009','上官文宏','女','河北保定','1989-03-15','1','1','2','2010-9-1','河北保定',null),('20101010','张倩','女','河北保定','1989-03-15','2','3','2','2010-9-1','河北保定','15123298762'),('20101011','刘英伟','男','河北保定','1989-03-15','3','2','2','2010-9-1','河北保定',null),('20101012','刘伟','男','河北保定   ','1989-03-15','2','4','2','2010-9-1','河北保定','15232598762'),('20101013','翟南','男','上海市','1989-03-15','2','1','3','2010-9-1','上海市','15194598772'),('20101014','窦士厝','男','云南昆明','1989-03-15','3','4','1','2010-9-1','云南昆明','15193248762');                                  insert into course
values('1','数据库系统概论','3','20','72','1','3'),
('2','100%掌握财务报表','3','30','54','1','2'),
('3','数据结构','5','30','72','1','4'),
('4','c++程序设计','5','15','72','1','4'),
('5','c 语言程序设计',null,'18','45','1','3'),
('6','WEB 开发',null,'28','72','1','2'),
('7','计算机导论',null,'10','32','1','1');insert into student_course
values('20101001','1',70),
('20101001','2',95),
('20101001','3',90),
('20101001','4',88),
('20101001','5',null),
('20101001','6',null),
('20101002','1',90),
('20101002','2',40),
('20101002','3',90),
('20101003','1',90),
('20101004','2',50),
('20101004','3',90),
('20101005','1',20),
('20101005','2',80),
('20101006','3',90),
('20101007','3',60),
('20101008','3',null),
('20101009','3',11),
('20101010','3',58),
('20101011','3',45);insert into teacher
values('836001','董青','男','1975-04-26','1','讲师','河北省石家庄市','50000','13798789765','dong@gmail.com'),
('836002','李亮','男','1975-04-26','1','副教授','河北省石家庄市','834000','13728789765','liliang@gmail.com'),
('836003','李晓亮','男','1975-04-26','1','讲师','河北省石家庄市','50300','12228789765','dong@gmail.com'),
('836004','项天','男','1975-04-26','2','教授','河北省石家庄市','832000','13798389765','dong@gmail.com'),
('836005','余孝天','男','1975-04-26','2','讲师','河北省石家庄市','50300','13798789765','dong@gmail.com'),
('836006','鲁婵娟','女','1975-04-26','3','副教授','河北省石家庄市','830200','13733789765','dong@gmail.com'),
('836007','李冉冉','女','1975-04-26','3','讲师','河北省石家庄市','833300','13727822765','dong@gmail.com'),
('836008','庄文','男','1975-04-26','2','教授','新疆自治区乌鲁木齐市','8200','13333789765','dong@gmail.com');insert into teacher_course
values('1','836001','1','1','1','2010','8:00-11:00','公教楼305','3'),
('2','836002','1','2','1','2010','8:00-11:00','公教楼305','3'),
('3','836002','2','2','1','2010','8:00-11:00','c305','3'),
('4','836003','2','3','1','2010','8:00-11:00','c305','3'),
('5','836003','2','1','1','2010','8:00-11:00','v305','3'),
('6','836003','1','3','1','2010','8:00-11:00','v305','3'),
('7','836004','3','4','1','2010','8:00-11:00','b305','3');insert into department
values('1','法政学院','河北省石家庄市裕华区南二环东路 20 号','50024','80788100'),
('2','教育学院','河北省石家庄市裕华区南二环东路 20 号','50024','80788101'),
('3','软件学院','河北省石家庄市裕华区南二环东路 20 号','50024','80788102'),
('4','数信学院','河北省石家庄市裕华区南二环东路 20 号','50024','80788102');

6. SQL查询

1)查询全体学生的学号、姓名、籍贯

select sno,sname,native from student;

2)查询所有课程的名称及学分

select cname,credit from course;

3)查询教师的姓名、性别、联系电话

select tname,sex,tel from teacher;

4)查询每门课程的课程编号、课程名称及理论学时

select cno,cname,lecture from course;

5)查询全体学生的姓名、联系电话,并在前面加上字符串‘联系方式’

select sname,'联系方式'+tel from student;

6)查询全体教师的人数

select count(distinct tno) from teacher;

7)查询全体教师的姓名、家庭住址、邮政编码(使用列别名)

select tname,home,zipcode '邮政编码' from teacher;

8)查询全体学生的姓名

select sname from student;

9)查询本学期有课的教师编号

select DISTINCT tno from teacher_course where cno in (select cno from course where semester = 1
);SELECT tno from teacher where tno in (select tno from teacher_course where semester = 1
);

10)查询所有选课的学生学号

select distinct sno from student_course;

查询所有没有选课的学生学号(左外连接)

左外连接列出左边关系中所有的元组,右外连接列出右边关系中所有的元组。

select student.sno from student  ##  student.sno  sno要加前缀!
LEFT JOIN student_course ON student.sno= student_course.sno
WHERE student_course.cno is NULL;

11)查询籍贯为河北保定的学生的学号和姓名

select sno,sname from student where native='河北保定';

12)查询课程学分小于 3 分的课程名称

select cname from course where credit<3;

13)查询在 c201 教室上课的教师编号 、姓名(左外连接)

select teacher.tno,teacher.tname,classroom from teacher
left join teacher_course on teacher.tno = teacher_course.tno
where teacher_course.classroom='c305';
  1. 查询软件学院的办公电话
select dtel from department where dname='软件学院';

15)查询学生成绩在 60-90 分的学生的学号和课程号 (多表连接)

select sname,cname,score from student,student_course,course
where student.sno = student_course.sno
and student_course.cno=course.cno
and score>=60 and score<90;
  1. 查询学分为 3 分的课程信息
select * from course where credit = 3;

17)查询在教学楼 C 座上课的教师的编号(模糊查询)

select tname,teacher.tno,classroom
from teacher,teacher_course
where teacher.tno=teacher_course.tno
and teacher_course.classroom like '%c%';

18)查询有先行课的课程编号及课程名

select fc.cname,fc.cno,sc.cname '先修课'
from course fc,course sc
where fc.cpno = sc.cno;

19)查询籍贯为山东省的学生基本信息

select * from student where native like "山东%";

20)查询姓名为 3 个字,前两个字为‘上官’的学生学号和姓名(模糊查询)

select sno,sname from student where sname like '上官_';

21)查询专业号为 3 的女学生的姓名、生日和家庭住址

select sname,birthday,native from student where dno='3' and sex = '女';

22)查询学号为‘20101001’的学生选修的课程号及成绩,结果按成绩升序排 列 (升序排序)

select sno,cno,score from student_course where sno='20101001'
ORDER BY sno ASC;

23)查询所有课程的基本信息,结果按授课学时降序排列,学时相同按学分升序排列 。

select * from course order by lecture desc,credit asc;

24)查询所有男教师的姓名和出生日期,结果年龄从小到大排序

select tname,birthday from teacher order by birthday desc;

25)查询选修 2 号课程学生成绩的最大值和最小值

select max(score),min(score) from student_course where cno='2';

26)查询所有教师的人数

select count(tno) from teacher;

27)查询所有专业号为 1 的学生人数

select count(distinct sno) from student where pno='1';

28)查询选课人数超过 5 人的课程编号 (having)

知识点: where子句是不能用聚集函数作为条件表达式。

HAVING子句可以让我们筛选分组后的各组数据。

select cno from student_course group by cno HAVING COUNT(*)>5;

29)查询所有学生的基本信息以及所在学院的名称和学院联系电话

select student.*,dname,dtel
from student,department
where student.dno = department.dno;

30)查询教师李亮的上课时间、上课地点和每周学时数

select classtime,classroom,weektime
from teacher_course
where tno in (select tno from teacherwhere tname='李亮'
);## 加一个课程名称
select cname,classtime,classroom,weektime
from teacher_course,teacher,course
where teacher.tno=teacher_course.tno
and teacher_course.cno = course.cno
and tname='李亮';

31)查询选修了数据库系统概论或数据结构的学生的学号和姓名

select student.sno,student.sname
from student
where sno in(select sno from student_coursewhere cno IN(select cnofrom coursewhere cname='数据库系统概论' or cname='数据结构')
);select student.sno,student.sname
from student
where sno in(select sno from student_course,coursewhere student_course.cno=course.cnoand cname='数据库系统概论'or cname='数据结构'
);

32-67 要求至少使用两种方式查询(对复杂查询,可以建立视图)

32)查询至多有两名男生的班级

select classno from student
where sex ='男'
group by classno
having COUNT(classno)<=2
UNION ## 考虑了没有男生的情况
SELECT classno
FROM student
WHERE classno not in (SELECT DISTINCT classno FROM student WHERE sex='男'
);

33)查询至少有一名教授的学院的信息

select * from department
where dno in(select dno from teacherwhere pno='教授'
);

34).查询出每个老师及其教课情况

select teacher.tname,course.*
from teacher,teacher_course,course
where teacher.tno=teacher_course.tno
and teacher_course.cno = course.cno;

35).查询每门课程及其被选修的人数

左外连接:列出左边关系的所以元组

右外连接:列出右边关系的所以元组

​ 因为两个表元组中都可以区分出人数,所以这道题左外连接和右外连接没有区别。

## 外连接
select course.cname,count(*) '人数'
from course LEFT JOIN student_course
on course.cno = student_course.cno
GROUP BY course.cno## 内连接
select course.cname,count(*) '人数'
from course,student_course
WHERE course.cno = student_course.cno
GROUP BY course.cno;

篇幅有限,其他的题目在下一篇~~~

测试开发面经(四)SQL基础相关推荐

  1. 100道经典测试开发面试题,从基础到进阶(1)

    1.你在测试中发现了一个bug,但是开发经理认为这不是一个bug,你应该怎样解决? 首先,将问题提交到缺陷管理库进行备案. 然后,要获取判断的依据和标准: 根绝需求说明书,产品说明.设计文档等,确认实 ...

  2. 测试开发面经(六)SQL增删改查

    文章目录 测试开发面经(六)SQL增删改查 6. 查询(续) 53).查询未授课教师的姓名和系 54).按职称显示软件学院的教师人数. 55).查询成绩高于<数据结构>平均成绩的学生信息. ...

  3. 初级测试开发面试题_初级开发人员在编写单元测试时常犯的错误

    初级测试开发面试题 自从我编写第一个单元测试以来已经有10年了. 从那时起,我不记得我已经编写了成千上万的单元测试. 老实说,我在源代码和测试代码之间没有任何区别. 对我来说是同一回事. 测试代码是源 ...

  4. 吊打面试官系列之:常见测试开发面试题汇总,在面试的路上,总要先下手为强。

    测试开发面试题汇总 1.引言 2.热身题 3.理论基础 4.管理技能 5.服务端 7.移动APP 7.1 理论 7.2 实践 8.自动化测试 9.工具使用 10.算法 11.SQL 12.Linux ...

  5. 金九银十面试怒拿6个offer——测试开发面试题整理

    金九银十面试怒拿6个offer--测试开发面试题整理 1.软件测试的流程是什么? 2.测试用例主要有哪些元素? 3.软件测试有什么策略和阶段? 4.黑盒测试和白盒测试是什么?二者有什么区别? 5.软件 ...

  6. 从基础到进阶,100道测试开发面试题,进大厂涨薪必备

    1.你在测试中发现了一个bug,但是开发经理认为这不是一个bug,你应该怎样解决? 首先,将问题提交到缺陷管理库进行备案. 然后,要获取判断的依据和标准: 根绝需求说明书,产品说明.设计文档等,确认实 ...

  7. 九月刚入职字节跳动的测试开发面试题,附答案

    朋友入职已经两周了,整体工作环境还是非常满意的!所以这次特意抽空给我写出了这份面试题,而我把它分享给小伙伴们,面试&入职的经验! 大概是在7月中的时候他告诉我投递了简历,9月的时候经过了3轮面 ...

  8. 测试开发面试题(1)

    1.给你一个网站,你如何测试? 首先,查找需求说明.网站设计等相关文档,分析测试需求:制定测试计划,确定测试范围和测试策略,一般包括以下及部分,功能性测试.界面测试.性能测试. 数据库测试.安全性测试 ...

  9. 月薪1.5w,经常面试的测试开发面试题

    1.你在测试中发现了一个bug,但是开发经理认为这不是一个bug,你应该怎样解决? 首先,将问题提交到缺陷管理库进行备案. 然后,要获取判断的依据和标准: 根绝需求说明书,产品说明.设计文档等,确认实 ...

最新文章

  1. 什么是 AIDL 以及如何使用
  2. 经典SQL短小代码收集汇总
  3. lucene索引合并与增量索引
  4. colab如何通过<>来直接加入相对应的代码段呢?模块化代码操作,真好
  5. hdfs web_ui深入讲解、服务启动日志分析、NN SNN关系
  6. 递归 尾递归_递归,递归,递归
  7. TYVJ P1073 加分二叉树 Label:区间dp
  8. python矩阵运算与线形代数_Python 执行矩阵与线性代数运算
  9. 雨滴桌面显示html,使用雨滴rainmeter打造炫酷桌面的方法!
  10. 89c52单片机c语言时钟,液晶显示AT89C52单片机DS1302实时时钟程序
  11. 浏览器市场占有率最新分析
  12. OSChina 周日乱弹 ——给苹果电脑选机械键盘
  13. iOS Apple Pay开发流程
  14. PS 2019 Mac版 自学入门系列(十一)—— 创建光照效果
  15. Selenium-鼠标和键盘操作
  16. 从0开始学习 GitHub 系列之「01.初识 GitHub」----转载自stormzhang 原创文章
  17. 我的网名为什么是ma6174????
  18. 细述个人建站那点心酸往事
  19. 音频处理二:(左右声道分离)
  20. 【经验分享】zlib库在Ubuntu下的安装和配置

热门文章

  1. java毕业生跟踪调查反馈系统springboot+vue
  2. 查看linux每个进程占用内存多少,Linux下如何查看哪个进程占用内存多?
  3. ETL流程、数据流图及ETL过程解决方案
  4. 网站图片优化有哪些?
  5. MacOS磁盘空间满了!如何清理mac电脑的隐藏空间!
  6. layui 实现搜索页码重置
  7. C++文件操作——按行读取txt文本文件
  8. 为什么一个字节表示2个16进制位?
  9. 无向图的遍历-BFS与DFS
  10. js原生实现jquery方法offset()和position()