mysql面试关联查询语句_sql语句多表联查语句的练习(面试题)

此篇文章中所示用的sql语句适用于mysql关系型数据库查询数据,其他类型的数据库是否支持,没有去尝试,想要在mysql

1.首先准备两个表,一个是学生表(student)

e166ced3a471d12e66788970e692aa67.png

另一个是科目分数表(grade)

626106d1df688eb3ef360619e8d7c6cc.png

当数据准备完成后,接下来就开始真正的问题了。

问题一: 列出各门课程成绩最好的2位学生,要求显示字段:学号,姓名,科目,成绩

ef6731d4025de26c1119c47144cc7d5d.png

查询语句如下所示:select a.id,a.name,a.kemu,a.score from(select s.id,s.name,g.kemu,g.score from student s,grade g where s.id=g.id) as a where(select count(*) from (select s.id,s.name,g.kemu,g.score from student s,grade g where s.id=g.id) as b where b.kemu=a.kemu and b.score >= a.score)<=2 order by a.kemu asc,a.score desc;其中a,b表示的都是结果集。

问题二: 计算每个人的成绩,总分数,平均分,要求显示学号,姓名,语文,数学,英语,总分,平均分

2ea5aded4e5da6713308461a11423301.png

查询语句如下所示:select s.id,s.name,max(case when g.kemu=‘语文’ then score else 0 end) as 语文,max(case when g.kemu=‘数学’ then score else 0 end) as 数学,max(case when g.kemu=‘英语’ then score else 0 end) as 英语,sum(score) as 总分,avg(score) as 平均分 from student s,grade g where s.id = g.id group by id;

问题三: 列出数学成绩的排名(要求显示字段:学号,姓名,成绩,排名)

注:排序,比较大小,比较的次数+1 = 排名

19a9b44cdeb8386ba37d635fc8ad2e8e.png

select a.id,a.name,a.score,(select count(*) from grade where kemu=‘数学’ and score > a.score)+1 as 名次 from (select s.id,s.name,g.kemu,g.score from student s,grade g where s.id=g.id) as a where a.kemu=‘数学’ order by a.score desc;

下面连接中拥有最详细的步骤从创建数据库开始到问题的解决,有需要点击“学生信息查询”进行下载。

学生信息查询

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值