实际面试题解析分享
一
已知如下:
学生表(学号、姓名):student(stu_no,stu_name),
科目表(课程ID,课程名称):course(c_id,c_name),
成绩(成绩ID,学号,课程,分数:grade(g_id,stu_no,c_id,fraction)
student表如下
stu_no | stu_name |
---|---|
1 | 张三 |
2 | 李四 |
3 | 王五 |
4 | 赵六 |
course表如下
c_id | c_name |
---|---|
1 | 语文 |
2 | 数学 |
3 | 英语 |
grade表如下
g_id | stu_no | c_id | fraction |
---|---|---|---|
1 | 1 | 1 | 70 |
2 | 2 | 2 | 60 |
3 | 3 | 2 | 99 |
4 | 4 | 3 | 50 |
5 | 2 | 2 | 40 |
6 | 1 | 3 | 66 |
1,查询所有姓张的学生姓名;
#首先根据题目信息 ,我们只需要查询 “student”表中姓名字段为姓张的字段即可
#姓张的姓名字段 我们可以用到模糊查询的用法
# 模糊查询 like:% 表示任意个任意字符
select stu_name from student where stu_name like '张%';
2,查询有语文课程的学生学号和姓名;
#首先这题涉及到的字段分别在不同表中,所以可以使用表连接完成
#这里用到了一个多表连接
select s.stu_no,s.stu_name from student s left join grade g on s.stu_no = g.stu_no left join course c on
g.c_id = c.c_id and c.c_name = "语文";
3,展示每个学生的学号、姓名、总成绩、平均分,并按总分从高到低排序;
#这题也需要使用到一个多表连接
#这边需要用到一个平均值函数avg 一个求和函数sum
select s.stu_no,s.stu_name,sum(g.fraction),avg(g.fraction) from student s inner join
grade g on s.stu_no = g.stu_no inner join course on c g.c_id = c.c_id order by sum(g.fraction) desc;
4,查询出所有科目成绩都在80分以上的学生姓名;
#这边我们可以使用一个子查询的方法
#先查出成绩大于80的同学的id 再查出id在这个范围内的人
select stu_name from student where stu_no in (select stu_no from grade where fraction > 80);