某教学管理数据库中有如下3个基本表。
学生:S(S#,SNAME,AGE,SEX),属性分别表示学号、姓名、年龄和性别。
学习:SC(S#,C#,GRADE),属性分别表示学号、课程号和成绩。
课程:C(C#,CNAME,TEACHER),属性分别表示课程号、课程名和教师姓名。
试用SQL语句完成下列操作:
(1)查询年龄大于20岁的男学生的学号和姓名。
(2)查询选修课程名为“操作系统”课程的学生的平均年龄。
(3)查询教师“王明”所授课程的课程号和课程名。
(4)查询选修课程包含教师“王明”所授课程的学生学号。
(5)查询教师“王明”所授课程的每门课程的学生平均成绩。
(6)统计每门课程的学生选修人数(超过10人的课程才统计),要求输出课程号和选修人数,查询结果按选修人数降序排列,若人数相同,则按课程号升序排列。
(7)查询姓张的所有学生的姓名和年龄。
(8)查询成绩为空值的学生学号和课程号。
(9)查询年龄大于女学生平均年龄的男学生姓名和年龄。
(10)查询年龄大于所有女学生年龄的男学生姓名和年龄。
(11)查询选修课程门数超过学号为S0001的学生选修门数的所有学生信息。
(12)查询每个学生的学号、选修课程门数(COUNT_C)和总成绩(TOTAL_G),将查询结果保存在一个名为RESULT的新表中。
(13)将SC中尚无成绩的选课记录删除。
(14)将学生“张三”的学习选课信息全部删去。
(15)将选修“操作系统”课程且不及格的成绩全改为空值。
(16)将低于总平均成绩的女学生成绩提高10%。
参考答案:(A)
SELECT S#, SNAME
FROM S
WHERE (AGE>B0) AND (SEX=’男’)
(B)
SELECT AVG(AGE)
FROM S
WHERE S# IN
(SELECT S#
FROM SC
WHERE C# IN
(SELECT C#
FROM C
WHERE CNAME=’操作系统’
)
)
(C)
SELECT C#, CNAME
FROM C
WHERE TEACHER=’王明’
(D)
SELECT DISTINCT S#
FROM SC
WHERE C# IN
(SELECT C#
FROM C
WHERE TEACHER=’王明’
)
(E)
SELECT CNAME,AVG(GRADE)
FROM SC JOIN C ON SC. C#=C. C#
WHERE TEACHER=’王明’
GROUP BY C#
(F)
SELECT DISTINCT C#, COUNT(S#)
FROM SC
GROUP BY C#
HAVING COUNT(S#)>A0
ORDER BY B DESC, C# ASC
(G)
SELECT SNAME,AGE
FROM S
WHERE SNAME LIKE ’张%’
(H)
SELECT S#, C#
FROM SC
WHERE GRADE IS NULL
(I)
SELECT SNAME, AGE
FROM S AS X
WHERE X.SEX=’男’ ND X.AGE>
(SELECT AVG(AGE)
FROM S AS Y
WHERE Y.SEX=’女’)
(A0)
SELECT SNAME, AGE
FROM S AS X
WHERE X.SEX=’男’ AND X.AGE>ALL
(SELECT AGE
FROM S AS Y
WHERE Y.SEX=’女’)
(AA)
SELECT *
FROM S
WHERE S# IN
(SELECT S#
FROM SC
GROUP BY S# HAVING COUNT(S#)>
(SELECT COUNT(*)
FROM SC
WHERE S#=’S000A’
)
)
(AB)
SELECT S.S#, COUNT(S.S#) AS COUNT C, SUM(GRADE) AS TOTAL G
INTO RESULT
FROM S JOIN SC ON S.S#=SC. S#
GROUP BY S.S#
(AC)
DELETE FROM SC
WHERE GRADE IS NULL
(AD)
DELETE FROM SC
WHERE S# IN
(SELECT S#
FROM S
WHERE SNAME=’张三’)
(AE)
UPDATE SC
SET GRADE=NULL
WHERE GRADE<F0 AND C# IN
(SELECT C#
FROM C
WHERE CNAME=’操作系统’)
(AF)
UPDATE SC
SET GRADE=GRADE*A.A
WHERE GRADE<(SELECT AVG(GRADE) FROM SC. AND
S# IN(SELECT S# FROM S WHERE SEX=’女’)