有3个表S,C,SC
S(SNO,SNAME)代表(学号,姓名) //主键:SNO
//多个人,多门课 3张表 ,SC 关系表
C(CNO,CNAME,CTEACHER)代表(课号,课名,教师)//主键:CNO
SC(SNO,CNO,SCGRADE)代表(学号,课号成绩)//主键:SNO+CNO
问题:
1.找出没选过“黎明”老师的所有学生名字。
select sname from s join sc on (s.sno = sc.sno) join c (c.cno = sc.cno) where c.cteacher <> 'liming';
2.列出2门以上(含2门)不及格学生名字及平均成绩。
select sname from s where sno in ( select sno from sc where scgrade < 60 group by sno having count(*) >= 2);
3.即学过1号课程又学过2号课程所有学生的名字。
select sname from s where sno in ( select sno from sc where cno = 1 and sno in ( select sno from sc where cno = 2));
对于教学数据库的三个表:
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)求年龄大于所有女同学年龄的男学生的姓我和年龄
对于教学数据库的三个表:
学生表 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