| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 766 人关注过本帖
标题:麻烦各位看看这样的SQL查询语句可以吗?
只看楼主 加入收藏
chinacdb
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2006-7-6
收藏
 问题点数:0 回复次数:7 
麻烦各位看看这样的SQL查询语句可以吗?

学生表 S(SN0,SNAME) 其中SNO:学号 SNAME:学生姓名
教师表 T(TNO,TNAME,SCNO) 其中TNO:工号 TNAME:教师姓名 SCNO:教授课程
成绩表 SC(SCNO,SCNAME,SNO,SCGRADE) 其中SCNO:课程代号 SCNAME:课程名 SCGRADE:课程成绩

1:找出没有选修李伟老师课程的所有同学的姓名;

2:找出平均成绩最高的同学的姓名及每门功课的成绩;

3:找出至少有两门(含两门)功课不及格的同学的姓名及不及格课程的成绩;

请用SQL语句实现上面的查询!

1: select sname from s where sno in (select sno from sc where scno not in(select scno from t where tname='李伟'))

2: select sname,scname,scgrade from s,sc where s.sno=sc.sno and sc.sno=
(select top 1 sno from sc group by sno order by avg(scgrade) desc)

3: select sname,scname,scgrade from s,sc where s.sno=sc.sno and sc.sno in
(select sno from sc group by sno having sum(case when scgrade<60 then 1 else 0 end)>1)


麻烦各位看看这样写可以吗?如果不妥请写出你的见解!谢谢!

搜索更多相关主题的帖子: SQL 语句 李伟 课程 SCNO 
2006-07-06 16:14
LouisXIV
Rank: 6Rank: 6
等 级:贵宾
威 望:25
帖 子:789
专家分:0
注 册:2006-1-5
收藏
得分:0 
1有问题,如果有学生同时选修了李伟和其他教师教授的课程,那么此学生亦会被误选出

2006-07-08 17:19
林升
Rank: 1
等 级:新手上路
威 望:1
帖 子:46
专家分:0
注 册:2006-6-12
收藏
得分:0 

1
select sname from s
where not exists (
select 1 from SC
where SNO=s.SNO
and exists (
select 1 from T
where Tname='李伟'
and scno=sc.scno
)
)

select aname,sn.*
from s,sc
where s.sno=sc.sno
and sno=(
select top 1 SNO
from sc
group by sno
order by avg(SCGRADE) desc
)


我是菜鸟,我怕谁!!!!!!!!!!!!!!!
2006-07-10 12:18
chinacdb
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2006-7-6
收藏
得分:0 
对于第二个,如果出现平均成绩的前几名是相同的,能否选择全部满足条件的信息!
2006-07-10 18:36
林升
Rank: 1
等 级:新手上路
威 望:1
帖 子:46
专家分:0
注 册:2006-6-12
收藏
得分:0 
当然可以,为什么不可以呢。

我是菜鸟,我怕谁!!!!!!!!!!!!!!!
2006-07-11 12:50
chinacdb
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2006-7-6
收藏
得分:0 

我今天测试了一下不可以啊,只能选出一个符合条件的语句!

select sname,scname,scgrade from s,sc where s.sno=sc.sno and sc.sno in (select sno from sc group by sno having avg(scgrade) >=all(select avg(scgrade) from sc group by sno))

上面这个语句可以满足,但我觉得这样太复杂了,执行起来会满,不知道有没有对
select sname,scname,scgrade from s,sc where s.sno=sc.sno and sc.sno=(select top 1 sno from sc group by sno order by avg(scgrade) desc)

进行修改的语句,再次麻烦各位了!
最后谢谢给予回帖的热心朋友 林升LouisXIV

2006-07-13 15:20
chinacdb
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2006-7-6
收藏
得分:0 


这样可以吗?
select sname,scname,scgrade from s,sc where s.sno=sc.sno and sc.sno in (select sno from sc group by sno having avg(scgrade)=(select top 1 avg(scgrade) from sc group by sno order by avg(scgrade) desc)

测试是可以的,就是不知道这样的复杂度和
select sname,scname,scgrade from s,sc where s.sno=sc.sno and sc.sno in (select sno from sc group by sno having avg(scgrade) >=all(select avg(scgrade) from sc group by sno))
比那个低点!

2006-07-13 15:27
chinacdb
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2006-7-6
收藏
得分:0 
想想感觉是一样的,郁闷!
2006-07-13 15:28
快速回复:麻烦各位看看这样的SQL查询语句可以吗?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020155 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved