SQL校招社招刷题系列之学生成绩信息查询

源表

s表

Sid :学生id
Sname :学生姓名

SidSname
1赵雷
2钱电
3孙风
4李云
5周梅
6吴兰
7郑竹

sc表

Sid 学生id
Cid 课程id
score 分数

SidCidscore
1180
1290
1399
2170
2260
2380
3180
3280
3380
4150
4230
4320
5176
5287
6131
6334
7289

c表

Cid 课程id
Cname 课程名称

CidCname
1语文
2数学
3英语

问题

  1. 用一条SQL语句查询每门课程都是大于80分的学生的姓名
  2. 查询“语文”课程比“数学”课程成绩高的学生的信息以及课程分数
  3. 查询平均成绩大于65分的学生的id和姓名以及平均成绩

问题一的解答

SELECT s.Sid,s.Sname 
FROM xiaoliu.s
INNER JOIN
xiaoliu.sc
ON sc.Sid=s.Sid
GROUP BY sc.Sid,s.Sname
HAVING MIN(sc.score)>80;

思路解析:因为要查询每门课程都是大于80分的学生的姓名,所以要联结包含学生姓名的和学号的 s 表和包含课程成绩的 sc 表,根据这两个表共同含有的Sid也就是学号来联结,最后再 group by 并且加 where 过滤。

问题二的解答

SELECT t1.Sid,t1.score AS '语文',t2.score AS '数学'
FROM
(SELECT Sid,score FROM xiaoliu.sc
INNER JOIN
xiaoliu.c
ON c.Cid=sc.Cid
WHERE c.Cname='语文') t1
INNER JOIN
(SELECT Sid,score FROM xiaoliu.sc
INNER JOIN
xiaoliu.c
ON c.Cid=sc.Cid
WHERE c.Cname='数学') t2
ON t1.Sid=t2.Sid
WHERE t1.score>t2.score;

思路解析:因为查询“语文”课程比“数学”课程成绩高的学生的信息以及课程分数,所以返回的还是学生的信息以及课程分数,即Sid ,语文成绩, 数学成绩,所以要做两张表分别查询学生的语文成绩和数学成绩即 t1 和 t2 。再根据学号相同来内连接这两张表,并且根据WHERE t1.score>t2.score这个过滤条件得到“语文”课程比“数学”课程成绩高的学生的信息以及课程分数

问题三的解答

SELECT s.Sid,s.Sname,AVG(sc.score) AS '平均成绩'
FROM 
xiaoliu.s
INNER JOIN
xiaoliu.sc
ON s.Sid=sc.Sid
GROUP BY s.Sid,s.Sname
HAVING AVG(sc.score)>65;

思路解析:因为要查询平均成绩大于65分的学生的id和姓名以及平均成绩,所以同样要根据学号相同来联结包含学生姓名的和学号的 s 表和包含课程成绩的 sc 表,并且根据平均成绩大于65来选出 Sid 和 Sname 以及平均成绩

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值