题目
对于教学数据库的三个基本表: S(S#,SNAME,AGE,SEX) SC(S#,C#,GRADE) C(C#,CNAME,TEACHER) 试用SQL的查询语句表达下列查询: 1)检索LIU老师所讲授课程的课程名。 2)检索年龄大于19岁的男学生的学号和姓名。 3)检索学号为S1的学生的姓名及所学课程的课程名。 4)检索SUN同学不学的课程的课程号。 5)统计每门课程的学生选修人数(超过10人的课程才统计)。要求显示课程号和人数,查询结果按人数降序排列,若人数相同,按课程号升序排列。 6)求LIU老师所授课程的每门课程的平均成绩。 7)求年龄大于女同学平均年龄的男学生姓名和年龄。 8)检索姓名以L打头的所有学生的姓名和性别。 9)把低于60分的学生的成绩提高5%。 10)在SC中删除尚无成绩的选课元组[1]。
对于教学数据库的三个基本表: S(S#,SNAME,AGE,SEX) SC(S#,C#,GRADE) C(C#,CNAME,TEACHER) 试用SQL的查询语句表达下列查询: 1)检索LIU老师所讲授课程的课程名。 2)检索年龄大于19岁的男学生的学号和姓名。 3)检索学号为S1的学生的姓名及所学课程的课程名。 4)检索SUN同学不学的课程的课程号。 5)统计每门课程的学生选修人数(超过10人的课程才统计)。要求显示课程号和人数,查询结果按人数降序排列,若人数相同,按课程号升序排列。 6)求LIU老师所授课程的每门课程的平均成绩。 7)求年龄大于女同学平均年龄的男学生姓名和年龄。 8)检索姓名以L打头的所有学生的姓名和性别。 9)把低于60分的学生的成绩提高5%。 10)在SC中删除尚无成绩的选课元组[1]。
题目解答
答案
1)select cname from c where teacher=’liu’ 2)select s#,sname from student where age>19 and sex=’男’ 3)select sname,cname from sc,c,s where s.s#=sc.s# and sc.c#=c.c# and s#=’s1’ 4)select c# from c where c# not in (select c# from s,sc where s.s#=sc.s# and sname=’SUN’) 5)select c#,count(*) from sc group by c# having count(*)>=10 order by 2 desc,1 asc 6)select c#,avg(grade) from sc,c where c.c#=sc.c# and teacher=’LIU’group by c.c# 7)select sname,age from s where age>(select avg(age) from s where sex=’女’) and sex='男'; 8)select sname,sex from s where sname like ‘L%’ 9) update sc set grade=grade+grade*5% where grade[60< p=""] 10)delete from sc where grade is null
解析
步骤 1:检索LIU老师所讲授课程的课程名
使用SQL的SELECT语句从C表中选择课程名(CNAME),其中TEACHER字段等于'LIU'。
步骤 2:检索年龄大于19岁的男学生的学号和姓名
使用SQL的SELECT语句从S表中选择学号(S#)和姓名(SNAME),其中AGE字段大于19且SEX字段等于'男'。
步骤 3:检索学号为S1的学生的姓名及所学课程的课程名
使用SQL的SELECT语句从S、SC和C表中选择SNAME和CNAME,其中S.S#等于SC.S#,SC.C#等于C.C#,并且S.S#等于'S1'。
步骤 4:检索SUN同学不学的课程的课程号
使用SQL的SELECT语句从C表中选择C#,其中C#不在从S和SC表中选择的C#列表中,其中S.S#等于SC.S#且SNAME等于'SUN'。
步骤 5:统计每门课程的学生选修人数(超过10人的课程才统计)
使用SQL的SELECT语句从SC表中选择C#和人数(COUNT(*)),其中人数大于等于10,按人数降序排列,若人数相同,按课程号升序排列。
步骤 6:求LIU老师所授课程的每门课程的平均成绩
使用SQL的SELECT语句从SC和C表中选择C#和平均成绩(AVG(GRADE)),其中C.C#等于SC.C#且TEACHER等于'LIU',按C.C#分组。
步骤 7:求年龄大于女同学平均年龄的男学生姓名和年龄
使用SQL的SELECT语句从S表中选择SNAME和AGE,其中AGE大于从S表中选择的女同学平均年龄,且SEX等于'男'。
步骤 8:检索姓名以L打头的所有学生的姓名和性别
使用SQL的SELECT语句从S表中选择SNAME和SEX,其中SNAME以'L'开头。
步骤 9:把低于60分的学生的成绩提高5%
使用SQL的UPDATE语句更新SC表中的GRADE字段,将低于60分的成绩提高5%。
步骤 10:在SC中删除尚无成绩的选课元组
使用SQL的DELETE语句从SC表中删除GRADE字段为空的记录。
使用SQL的SELECT语句从C表中选择课程名(CNAME),其中TEACHER字段等于'LIU'。
步骤 2:检索年龄大于19岁的男学生的学号和姓名
使用SQL的SELECT语句从S表中选择学号(S#)和姓名(SNAME),其中AGE字段大于19且SEX字段等于'男'。
步骤 3:检索学号为S1的学生的姓名及所学课程的课程名
使用SQL的SELECT语句从S、SC和C表中选择SNAME和CNAME,其中S.S#等于SC.S#,SC.C#等于C.C#,并且S.S#等于'S1'。
步骤 4:检索SUN同学不学的课程的课程号
使用SQL的SELECT语句从C表中选择C#,其中C#不在从S和SC表中选择的C#列表中,其中S.S#等于SC.S#且SNAME等于'SUN'。
步骤 5:统计每门课程的学生选修人数(超过10人的课程才统计)
使用SQL的SELECT语句从SC表中选择C#和人数(COUNT(*)),其中人数大于等于10,按人数降序排列,若人数相同,按课程号升序排列。
步骤 6:求LIU老师所授课程的每门课程的平均成绩
使用SQL的SELECT语句从SC和C表中选择C#和平均成绩(AVG(GRADE)),其中C.C#等于SC.C#且TEACHER等于'LIU',按C.C#分组。
步骤 7:求年龄大于女同学平均年龄的男学生姓名和年龄
使用SQL的SELECT语句从S表中选择SNAME和AGE,其中AGE大于从S表中选择的女同学平均年龄,且SEX等于'男'。
步骤 8:检索姓名以L打头的所有学生的姓名和性别
使用SQL的SELECT语句从S表中选择SNAME和SEX,其中SNAME以'L'开头。
步骤 9:把低于60分的学生的成绩提高5%
使用SQL的UPDATE语句更新SC表中的GRADE字段,将低于60分的成绩提高5%。
步骤 10:在SC中删除尚无成绩的选课元组
使用SQL的DELETE语句从SC表中删除GRADE字段为空的记录。