I
iCANK
Unregistered / Unconfirmed
GUEST, unregistred user!
表 s
s# sname age sex
001 张三 22 M
002 李四 22 F
003 乔峰 30 M
004 段誉 25 M
005 虚竹 23 M
006 王语焉 80 F
007 王五 3 M
表 sc
s# c# grade
001 01 90
001 02 86
001 03 89
001 04 99
002 01 98
002 03 100
003 02 68
003 04 81
004 01 75
005 02 74
表 c
c# cname teacher
01 语文 金庸
02 数学 华罗庚
03 英语 李阳
04 计算机 比尔
高程数据库知识的一个题目。现在有两个问题:
一。
选出所学课程包含学生某某所学课程的学生姓名。
比如,选出包含学生 李四 所学课程的学生姓名,结果就应该是 张三 和 李四。而我的 sql 语句(只选出了学号):
select s# from sc
where c# in
(
select c# from sc
where s# in
(
select s# from s
where sname='李四'
)
)
group by s#
总是把 段誉 也选出来了,实际上他只学了一门课。很明显不对。
这个 sql 语句应该怎么写啊?没有比较集合的函数啊。
问题二。
选出平均成绩最高的学生用下面的 sql 语句:
select * from s
where s# in
(
select s# from sc
group by s#
having avg(grade) >= all --①
(
select avg(grade) from sc
group by s#
)
)
我把 ① 处的 having avg(grade) >= all 改为 having avg(grade) > all 或者 having avg(grade) = all
都不能得到正确结果。为什么,解释一下 all() 。
另外,这个题目怎么用 max() 来做?
谢谢!
s# sname age sex
001 张三 22 M
002 李四 22 F
003 乔峰 30 M
004 段誉 25 M
005 虚竹 23 M
006 王语焉 80 F
007 王五 3 M
表 sc
s# c# grade
001 01 90
001 02 86
001 03 89
001 04 99
002 01 98
002 03 100
003 02 68
003 04 81
004 01 75
005 02 74
表 c
c# cname teacher
01 语文 金庸
02 数学 华罗庚
03 英语 李阳
04 计算机 比尔
高程数据库知识的一个题目。现在有两个问题:
一。
选出所学课程包含学生某某所学课程的学生姓名。
比如,选出包含学生 李四 所学课程的学生姓名,结果就应该是 张三 和 李四。而我的 sql 语句(只选出了学号):
select s# from sc
where c# in
(
select c# from sc
where s# in
(
select s# from s
where sname='李四'
)
)
group by s#
总是把 段誉 也选出来了,实际上他只学了一门课。很明显不对。
这个 sql 语句应该怎么写啊?没有比较集合的函数啊。
问题二。
选出平均成绩最高的学生用下面的 sql 语句:
select * from s
where s# in
(
select s# from sc
group by s#
having avg(grade) >= all --①
(
select avg(grade) from sc
group by s#
)
)
我把 ① 处的 having avg(grade) >= all 改为 having avg(grade) > all 或者 having avg(grade) = all
都不能得到正确结果。为什么,解释一下 all() 。
另外,这个题目怎么用 max() 来做?
谢谢!