对于教学数据库的三个表: S(S#,SNAME,AGE,SEX) SC(S#,C#,GRADE) C(C#,CNAME,TEACHER)

对于教学数据库的三个表:
S(S#,SNAME,AGE,SEX)
SC(S#,C#,GRADE)
C(C#,CNAME,TEACHER)
试用SQL查询语句完成下列查询操作
(1) 统计有学生选修的课程门数
(2) 求选修C4课程的女学生的平均年龄
(3) 求刘老师所授的课程的每门课程的平均成绩
(4) 统计每门课程的学生选修人数(超过10人的课程才统计)。要求显示课程号和人数,查询结果按人数降序排列,若人数相同,按课程号升序排列。
(5) 检索学号比王军同学大,而年龄比他小的学生姓名。
(6) 在表SC中检索成绩为空值的学生学号和课程号
(7) 求年龄大于女同学平均年龄的男学生的姓名和年龄
(8) 求年龄大于所有女同学年龄的男学生的姓我和年龄
谁帮我求一下,谢了

第1个回答  2011-11-19
对于教学数据库的三个表:
学生表 S(S#,SNAME,AGE,SEX)
选课表 SC(S#,C#,GRADE)
课程表 C(C#,CNAME,TEACHER)
试用SQL查询语句完成下列查询操作
(1) 统计有学生选修的课程门数
select count(C#)
from SC

(2) 求选修C4课程的女学生的平均年龄
select avg(AGE)
from S, SC
where S.S#=SC.S# and SC.C#='C4' and SEX='女'

(3) 求刘老师所授的课程的每门课程的平均成绩
select CNAME, avg(GRADE)
from SC, C
where SC.C#=C.C# and C.TEACHER='刘老师'
group by CNAME

(4) 统计每门课程的学生选修人数(超过10人的课程才统计)。要求显示课程号和人数,查询结果按人数降序排列,若人数相同,按课程号升序排列。
select C#, count(S#) as count_s
from S, SC
where S.S# = SC.S#
having count(S#)>10
group by C#
order by count_s, C#

(5) 检索学号比王军同学大,而年龄比他小的学生姓名。
select SNAME
from S,
(select S# as S_WJ, AGE as AGE_WJ from S where S.NAME='王军') as A
where S# > A.S_WJ and AGE < A.AGE_WJ

(6) 在表SC中检索成绩为空值的学生学号和课程号
select S#,C#
from SC
where GRADE is null

(7) 求年龄大于女同学平均年龄的男学生的姓名和年龄
select NAME, AGE
from S,
(select avg(AGE) as AGE1 from S where SEX='女') as A
where SEX='男' and AGE > A.AGE1

(8) 求年龄大于所有女同学年龄的男学生的姓我和年龄
select NAME, AGE
from S,
(select max(AGE) as AGE1 from S where SEX='女') as A
where SEX='男' and AGE > A.AGE1本回答被提问者采纳
相似回答