数据库面试题 ,无聊整一下

数据库试题
1.现有学生、课程、成绩、教师四张表。包含以下信息:
Student(S#,Sname,Sage,Ssex)学生表。
S#:学号;Sname:学生姓名;Sage:学生年龄;Ssex:学生性别。
Course(C#,Cname,T#)课程表。
C#:课程编号;Cname:课程名称;T#:教师编号。
SC(S#,C#,score)成绩表。
S#:学号;C#:课程编号;score:成绩。
Teacher(T#,Tname)教室表。
T#:教师编号;Tname:教师名字。
完成以下题目:

1)查询“111”课程比“112”课程成绩高的所有学生的学号;
2)查询平均成绩大于60分的同学的学号和平均成绩;
3)查询姓“李”的老师的个数;
4)查询各科成绩最高分和最低分:以如下形式显示:课程ID,最高分,最低分。
5)删除‘2’同学的‘111’课程的成绩。
 

这边我没有那么全去建表, 以下是刚才在大概7-8分钟内,以最快速的想到啥方法就去用啥方法解决上面的问题。

 首先1)  我看到题目,先想到这个用临时表,一张 111的, 一张112的,再通过学号关联起来查询。

所以,有了以下的代码思路:

select 学生表.学生号 ,成绩表.成绩 from  学生表,成绩表,课程表 where 三表各种等值关联 and 课程识别号=‘111’; 

select 学生表.学生号 ,成绩表.成绩 from  学生表,成绩表,课程表 where 三表各种等值关联 and 课程识别号=‘112’;

然后同时作为临时表,

select 学生表.学生号 from (select 学生表.学生号 ,成绩表.成绩 from  学生表,成绩表,课程表 where 三表各种等值关联 and 课程识别号=‘111’)a,(select 学生表.学生号 ,成绩表.成绩 from  学生表,成绩表,课程表 where 三表各种等值关联 and 课程识别号=‘112’)b where a.学生号=b.学生号 and a.score>b.score;

我后面补了2个表,给后面几题,这样为了大家看思路更清晰,

学生表:

成绩表:

不要在意这些表的字段名什么的,单纯为了配合讲解思路。

好了2)一看到题目里面的‘和’字,我第一时间还是想到分层解题,也就是继续用临时表。

所以有了以下代码:

先把平均成绩,学生号,计算出来,

SELECT score.stuid,avg(score) as tlscore from world.score, student where student.stuid=score.stuid group by score.stuid

然后当作临时表组合下,

select stuid,tlscore from(SELECT score.stuid,avg(score) as tlscore from world.score, student where student.stuid=score.stuid group by score.stuid)a where tlscore>60;

3)这个简单写,模糊查询,姓为前,后面模糊

我查的姓张的,

SELECT count(*) FROM world.student where name like '张%'

4)这么单纯考的就是max,min,

select subname ,max(score),min(score) from score  group by subname

我的表里面没建课程表和成绩表关联,直接用的课程名,意思理会就行,多个关联而已。

5)这个有点意思,字面上说是删除某个课程成绩, 但是其他记录应该不删除,那我这用update了,

update  score set score=null where subname='pe' and stuid='3'

好了,今天无聊看别人博客看的的什么公司面试题,就跟着做了下。 就这样吧。

最后 mysql查询语句实现分页查询, 翻页。

MySQL数据库实现分页查询的SQL语句写法!

一:分页需求:

客户端通过传递start(页码),limit(每页显示的条数)两个参数去分页查询数据库表中的数据,那我们知道MySql数据库提供了分页的函数limit m,n,但是该函数的用法和我们的需求不一样,所以就需要我们根据实际情况去改写适合我们自己的分页语句,具体的分析如下:

比如:

查询第1条到第10条的数据的sql是:select * from table limit 0,10;   ->对应我们的需求就是查询第一页的数据:select * from table limit (1-1)*10,10;

查询第10条到第20条的数据的sql是:select * from table limit 10,20;  ->对应我们的需求就是查询第二页的数据:select * from table limit (2-1)*10,10;

查询第20条到第30条的数据的sql是:select * from table limit 20,30;  ->对应我们的需求就是查询第三页的数据:select * from table limit (3-1)*10,10;

二:通过上面的分析,可以得出符合我们自己需求的分页sql格式是:

select * from table limit (start-1)*limit,limit; 其中start是页码,limit是每页显示的条数。

这个start limit,后面结合前端页面传过来给后端,后端给mysql调用就行。 思路是这样就好。 实际开发,前后端都有插件或者别人写好的代码, 分页很简单的。

猜你喜欢

转载自blog.csdn.net/qq_35387940/article/details/83894690