当前位置:首页 > 数据库复习题
WHERE X.SNO=Y.SNO AND X.CNO<>Y.CNO Notice:对表SC进行自连接,X,Y是SC的两个别名。
(6)检索全部学生都选修的课程的课程号与课程名。 SELECT C#,CNAME FROM C
WHERE NOT EXISTS (SELECT * FROM S
WHERE S# NOT IN (SELECT * FROM SC
WHERE SC.C#=C.C#))
要从语义上分解:(1)选择课程的课程号与课程名,不存在不选这门课的同学。 其中,“不选这门课的同学”可以表示为:
或者
SELECT * FROM S
WHERE S# NOT IN (SELECT * FROM SC
WHERE SC.C#=C.C#)
SELECT * FROM S
WHERE NOT EXISTS (SELECT * FROM SC WHERE S.S#=C.S# AND
SC.C#=C.C# )
(7)检索选修课程包含LIU老师所授课的学生学号。 SELECT DISTINCT S# FROM SC WHERE C# IN (SELECT C# FROM C
WHERE TEACHER='LIU'))
3.3 设有两个基本表R(A,B,C)和S(D,E,F),试用SQL查询语句表达下列关系代数表达式: (1)πA(R) (2)σ
B='17'
(R) (3)R×S (4))π
A,F
(σ
C=D
(R×S))
(1)SELECT A FROM R
(2)SELECT * FROM R WHERE B='17' (3)SELECT A,B,C,D,E,F FROM R,S (4)SELECT A,F FROM R,S WHERE R.C=S.D
3.4 3.4 设有两个基本表R(A,B,C)和S(A,B,C)试用SQL查询语句表达下列关系代数表达式:
(1)R∪S (2)R∩S (3)R-S (4)π
(1)SELECT A,B,C FROM R UNION SELECT A,B,C FROM S
(2)SELECT A,B,C FROM R INTERSECT SELECT A,B,C FROM S
(3)SELECT A,B,C FROM R
WHERE NOT EXISTS (SELECT A,B,C FROM S
WHERE R.A=S.A AND R.B=S.B AND R.C=S.C)
(4)SELECT R.A,R.B,S.C FROM R,S WHERE R.B=S.B
A,B
(R)π
B,C
(S)
3.5 试叙述SQL语言的关系代数特点和元组演算特点。
(P61-62)
3.6 试用SQL查询语句表达下列对教学数据库中三个基本表S、SC、C的查询:
(1)统计有学生选修的课程门数。
SELECT COUNT(DISTINCT C#) FROM SC
(2)求选修C4课程的学生的平均年龄。 SELECT AVG(AGE) FROM S WHERE S# IN (SELECT S# FROM SC WHERE C#='C4') 或者,
SELECT AVG(AGE) FROM S,SC
WHERE S.S#=SC.S# AND C#='004'
(3)求LIU老师所授课程的每门课程的学生平均成绩。 SELECT CNAME,AVG(GRADE) FROM SC ,C
WHERE SC.C#=C.C# AND TEACHER='LIU' GROUP BY C#
(4)统计每门课程的学生选修人数(超过10人的课程才统计)。要求输出课程号和选修人数, 查询结果按人数降序排列,若人数相同,按课程号升序排列。 SELECT DISTINCT C#,COUNT(S#) FROM SC GROUP BY C#
HAVING COUNT(S#)>10 ORDER BY 2 DESC, C# ASC
(5)检索学号比WANG同学大,而年龄比他小的学生姓名。 SELECT X.SNAME FROM S AS X, S AS Y
WHERE Y.SNAME='WANG' AND X.S#>Y.S# AND X.AGE (6)检索姓名以WANG打头的所有学生的姓名和年龄。 SELECT SNAME,AGE FROM S WHERE SNAME LIKE 'WANG%' (7)在SC中检索成绩为空值的学生学号和课程号。 SELECT S#,C# FROM SC WHERE GRADE IS NULL (8)求年龄大于女同学平均年龄的男学生姓名和年龄。 SELECT SNAME,AGE FROM S AS X WHERE X.SEX='男' AND X.AGE>(SELECT AVG(AGE) FROM S AS Y WHERE Y.SEX='女') (9)求年龄大于所有女同学年龄的男学生姓名和年龄。 SELECT SNAME,AGE FROM S AS X WHERE X.SEX='男' AND X.AGE>ALL (SELECT AGE FROM S AS Y WHERE Y.SEX='女') 3.7 试用SQL更新语句表达对教学数据库中三个基本表S、SC、C的各个更新操作: (1)往基本表S中插入一个学生元组(‘S9’,‘WU’,18)。 INSERT INTO S(S#,SNAME,AGE) VALUES('59','WU',18) (2)在基本表S中检索每一门课程成绩都大于等于80分的学生学号、姓名和性别, 并把检索到的值送往另一个已存在的基本表STUDENT(S#,SANME,SEX)。 INSERT INTO STUDENT(S#,SNAME,SEX) SELECT S#,SNAME,SEX FROM S WHERE NOT EXISTS (SELECT * FROM SC WHERE GRADE<80 AND S.S#=SC.S#) (3)在基本表SC中删除尚无成绩的选课元组。 DELETE FROM SC WHERE GRADE IS NULL (4)把WANG同学的学习选课和成绩全部删去。 DELETE FROM SC WHERE S# IN (SELECT S# FROM S
共分享92篇相关文档