有3个表S,C,SC
S(SNO,SNAME)代表(学号,姓名) //主键:SNO //多个人,多门课 3张表 ,SC 关系表C(CNO,CNAME,CTEACHER)代表(课号,课名,教师)//主键:CNOSC(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';
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, SCwhere S.S#=SC.S# and SC.C#='C4' and SEX='女'(3)求刘老师所授的课程的每门课程的平均成绩
select CNAME, avg(GRADE)from SC, Cwhere SC.C#=C.C# and C.TEACHER='刘老师'group by CNAME(4)统计每门课程的学生选修人数(超过10人的课程才统计)。要求显示课程号和人数,查询结果按人数降序排列,若人数相同,按课程号升序排列。
select C#, count(S#) as count_sfrom S, SCwhere S.S# = SC.S#having count(S#)>10group by C#order by count_s, C#(5)检索学号比王军同学大,而年龄比他小的学生姓名。
select SNAMEfrom S, (select S# as S_WJ, AGE as AGE_WJ from S where S.NAME='王军') as Awhere S# > A.S_WJ and AGE < A.AGE_WJ(6)在表SC中检索成绩为空值的学生学号和课程号
select S#,C#from SCwhere GRADE is null(7)求年龄大于女同学平均年龄的男学生的姓名和年龄
select NAME, AGEfrom S, (select avg(AGE) as AGE1 from S where SEX='女') as Awhere SEX='男' and AGE > A.AGE1(8)求年龄大于所有女同学年龄的男学生的姓我和年龄
select NAME, AGEfrom S, (select max(AGE) as AGE1 from S where SEX='女') as Awhere SEX='男' and AGE > A.AGE1