SQL sever试题

本文介绍了几个复杂的SQL Server查询案例,包括查找所有学过'谌燕'老师所有课程的学生信息,将'谌燕'老师课程成绩更新为平均分,以及查询与's001'学号同学学习课程完全相同的学生。这些查询涉及到多表联接、子查询、聚合函数和条件过滤等技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最新学习了几道有难度SQL sever的查询:

查询学过“谌燕”老师所教的所有课的同学的学号、姓名;

select s.sno,s.sname

from student s

inner join sc c on s.sno=c.sno

inner join course o on c.cno=o.cno

inner join teacher t on t.tno=o.tno

where t.tname='谌燕'

group by s.sno,s.sname

having count(c.sno)=(select count(*) from course o inner join teacher t on o.tno=t.tno where t.tname='谌燕')

因为要查询'谌燕'老师所教的所有课的;所以先连表查出'谌燕'老师过得学生,然后再用条数对比'谌燕'老师有多少门课程.

把“SC”表中“谌燕”老师教的课的成绩都更改为此课程的平均成绩;

查询:

select c1.sno,c1.cno,s2.score

from sc c1 INNER JOIN (

select c.cno,avg(c.score)score 

from sc c

inner join course o on c.cno=o.cno

inner join teacher t on o.tno=t.tno

where t.tname='谌燕'

group by c.cno) s2

on s2.cno=c1.cno

用子查询出平均值,再根据课程id来找到对应的值。

效果:

修改:

update sc set sc.score=s2.score

from sc c1

INNER JOIN (

select c.cno,avg(c.score)score 

from sc c inner join course o on c.cno=o.cno

inner join teacher t on o.tno=t.tno

where t.tname='谌燕'

group by c.cno) s2

on s2.cno=c1.cno

基本和上面查询一样。

14、查询和“s001”号的同学学习的课程完全相同的其他同学学号和姓名;

select c.sno,s.sname

from sc c

inner join student s on c.sno= s.sno

where c.cno in (

select c1.cno

from sc c1 inner join student s1 on c1.sno= s1.sno

where c1.sno='s001')

and c.sno!='s001'

group by c.sno,s.sname

having count(c.cno) >= (select count(*) from sc where sno='s001')

查询出学过“s001”号的同学任意一门课程的所有同学,再通过条数对比可没有等于或者比“s001”号的同学学的多课程的同学。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值