数据库基本知识第五章课后答案解析.docx
- 文档编号:29153032
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:11
- 大小:17.77KB
数据库基本知识第五章课后答案解析.docx
《数据库基本知识第五章课后答案解析.docx》由会员分享,可在线阅读,更多相关《数据库基本知识第五章课后答案解析.docx(11页珍藏版)》请在冰豆网上搜索。
数据库基本知识第五章课后答案解析
5.4对于教学数据库的三个基本表
学生S(S#,SNAME,AGE,SEX)
学习SC(S#,,GRADE)
课程C(C#,CNAME,TEACHER)
试用SQL的查询语句表达下列查询:
(1)检索LIU老师所授课程的课程号和课程名。
SELECTC#,CNAME
FROMC
WHERETEACHER='LIU'
(2)检索年龄大于23岁的男学生的学号和姓名。
SELECTS#,SNAME
FROMS
WHERE(AGE>23)AND(SEX='M')
(3)检索至少选修LIU老师所授课程中一门课程的女学生姓名
SELECTSNAME
FROMS
WHERESEX='F'ANDS#IN
(SELECTS#
FROMSC
WHEREC#IN
(SELECTC#
FROMC
WHERETEACHER='LIU')
NOTICE:
有多种写法,比如联接查询写法:
SELECTSNAME
FROMS,SC,C
WHERESEX='F'ANDSC.S#=S.S#
ANDSC.C#=C.C#
ANDTEACHER='LIU'
但上一种写法更好一些。
(4)检索WANG同学不学的课程的课程号。
SELECTC#
FROMC
WHEREC#NOTIN
(SELECTC#
FROMSC
WHERES#IN
(SELECTS#
FROMS
WHERESNAME='WANG'))
(5)检索至少选修两门课程的学生学号。
SELECTDISTINCTX.SNO
FROMSCX,SCY
WHEREX.SNO=Y.SNOANDX.CNO<>Y.CNO
Notice:
对表SC进行自连接,X,Y是SC的两个别名。
(6)检索全部学生都选修的课程的课程号与课程名。
SELECTC#,CNAME
FROMC
WHERENOTEXISTS
(SELECT*
FROMS
WHERES#NOTIN
(SELECT*
FROMSC
WHERESC.C#=C.C#))
要从语义上分解:
(1)选择课程的课程号与课程名,不存在不选这门课的同学。
其中,“不选这门课的同学”可以表示为:
或者
SELECT*
SELECT*
FROMS
FROMS
WHERENOTEXISTS
WHERES#NOTIN
(SELECT*
(SELECT*
FROMSC
FROMSC
WHERES.S#=C.S#
WHERESC.C#=C.C#)
AND
SC.C#=C.C#)
(7)检索选修课程包含LIU老师所授课的学生学号。
SELECTDISTINCTS#
FROMSC
WHEREC#IN
(SELECTC#
FROMC
WHERETEACHER='LIU'))
(8)统计有学生选修的课程门数。
SELECTCOUNT(DISTINCTC#)FROMSC
(9)求选修C4课程的学生的平均年龄。
SELECTAVG(AGE)
FROMS
WHERES#IN
(SELECTS#
FROMSC
WHEREC#='C4')
或者,
SELECTAVG(AGE)
FROMS,SC
WHERES.S#=SC.S#ANDC#='OO4'
(10)求LIU老师所授课程的每门课程的学生平均成绩。
SELECTCNAME,AVG(GRADE)
FROMSC,C
WHERESC.C#=C.C#ANDTEACHER='LIU'
GROUPBYC#
查询
(11)统计每门课程的学生选修人数(超过10人的课程才统计)。
要求输出课程号和选修人数,
结果按人数降序排列,若人数相同,按课程号升序排列。
SELECTDISTINCTC#,COUNT(S#)
FROMSC
GROUPBYC#
HAVINGCOUNT(S#)>10
ORDERBY2DESC,C#ASC
(12)检索学号比WANG同学大,而年龄比他小的学生姓名。
SELECTX.SNAME
FROMSASX,SASY
WHEREY.SNAME='WANG'ANDX.S#>Y.S#ANDX.AGE (13)检索姓名以WANG打头的所有学生的姓名和年龄。 SELECTSNAME,AGE FROMS WHERESNAMELIKE'WANG%' (14)在SC中检索成绩为空值的学生学号和课程号。 SELECTS#,C# FROMSC WHEREGRADEISNULL (15)求年龄大于女同学平均年龄的男学生姓名和年龄。 SELECTSNAME,AGE FROMSASX WHEREX.SEX='男'ANDX.AGE>(SELECTAVG(AGE)FROMSASY WHEREY.SEX='女') (16)求年龄大于所有女同学年龄的男学生姓名和年龄。 SELECTSNAME,AGE FROMSASX WHEREX.SEX='男'ANDX.AGE>ALL(SELECTAGEFROMSASYWHERE Y.SEX='女') 5.6试用SQL更新语句表达对教学数据库中三个基本表S、SC、C的各个更 新操作: (1)往基本表S中插入一个学生元组(’S9'‘WU',18)。 INSERTINTOS(S#,SNAME,AGE)VALUES('59','WU',18) 并把检索到的值 (2)在基本表S中检索每一门课程成绩都大于等于80分的学生学号、姓名和性别,送往另一个已存在的基本表STUDENT(S#,SANME,SEX)。 INSERTINTOSTUDENT(S#,SNAME,SEX) SELECTS#,SNAME,SEX FROMSWHERENOTEXISTS (SELECT*FROMSCWHERE GRADE<80ANDS.S#=SC.S#) (3)在基本表SC中删除尚无成绩的选课元组。 DELETEFROMSC WHEREGRADEISNULL (4)把WANG同学的学习选课和成绩全部删去。 DELETEFROMSC WHERES#IN (SELECTS# FROMS WHERESNAME='WANG') (5)把选修MATHS课不及格的成绩全改为空值。 UPDATESC SETGRADE=NULL WHEREGRADE<60ANDC#IN (SELECTC# FROMC WHERECNAME='MATHS') (6)把低于总平均成绩的女同学成绩提高5%。 UPDATESC SETGRADE=GRADE*1.05 WHEREGRADE<(SELECTAVG(GRADE)FROMSC)ANDS#IN(SELECTS# FROMSWHERESEX='F') (7)在基本表SC中修改C4课程的成绩,若成绩小于等于75分时提高5%,若成绩大于75分时提高 4%(用两个UPDATE语句实现)。 UPDATESC SETGRADE=GRADE*1.05 WHEREC#='C4'ANDGRADE<=75 UPDATESC SETGRADE=GRADE*1.04 WHEREC#='C4'ANDGRADE>75 5.7在第1章例1.4中提到“仓库管理”关系模型有五个关系模式: 零件PART(P#,PNAME,COLOR,WEIGHT) 项目PROJECT(J#,JNAME,DATE) 供应商SUPPLIER(S#,SNAME,SADDR) 供应P_P(J#,P#,TOTOAL) 采购P_S(P#,S#,QUANTITY) (1)试用SQLDDL语句定义上述五个基本表,并说明主键和外键。 CREATETABLEPART (P#CHAR(4)NOTNULL,PNAMECHAR(12)NOTNULL, COLORCHAR(10),WEIGHTREAL, PRIMARYKEY(P#)) CREATETABLEPROJECT (J#CHAR(4)NOTNULL,JNAMECHAR(12)NOTNULL, DATEDATE, PRIMARYKEY(J#)) CREATETABLESUPLIER (S#CHAR(4)NOTNULL,SNAMECHAR(12),SADDRVARCHAR(20), PRIMARYKEY(S#)) CREATETABLEP_P (J#CHAR(4),P#CHAR(4),TOTALINTEGER, PRIMARYKEY(J#,P#), FOREIGNKEY(J#)REFERENCEPROJECT(J#), FOREIGNKEY(P#)REFERENCEPART(P#)) CREATETABLEP_S (P#CHAR(4),S#CHAR(4),QUANTITYINTEGER, PRIMARYKEY(P#,S#), FOREIGNKEY(P#)REFERENCEPART(P#), FOREIGNKEY(S#)REFERENCESUPLIER(S#)) (2)试将PROGECT、P—P、PART三个基本表的自然联接定义为一个视图VIEW1,PART、P_S、 SUPPLIER三个基本表的自然联接定义为一个视图VIEW2。 CREATEVIEWVIEW1(J#,JNAME,DATE,P#,PNAME,COLOR,WEIGHT,TOTAL) ASSELECT PROJECT.J#,JNAME,DATE,PART.P#,PNAME,COLOR,WEIGHT,TOTAL FROMPROJECT,PART,P_P WHEREPART.P#=P_P.P#ANDP_P.J#=PROJECT.J# CREATEVIEW VIEW2(P#,PNAME,COLOR,WEIGHT,S#,SNAME,SADDR,QUANTITY) ASSELECT PART.P#,PNAME,COLOR,WEIGHT,SUPPLIER.S#,SNAME,SADDR,QUANTITY FROMPART,P_S,SUPPLIER WHEREPART.P#=P_S.P#ANDP_S.S#=SUPPLIER.S# (3)试在上述两个视图的基础上进行数据查询: 1)检索上海的供应商所供应的零件的编号和名字。 SELECTP#,PNAMEFROMVIEW2WHERESADDR='SHANGHAI' 2)检索项目J4所用零件的供应商编号和名字。 SELECTS#,SNAMEFROMVIEW2WHEREP#IN(SELECTP#FROMVIEW1 WHEREJ#='J4') 5.8对于教学数据库中基本表SC,已建立下列视图: CREATEVIEWS_GRADE(S#,C_NUM,AVG—GRADE) ASSELECTS#,COUNT(C#),AVG(GRADE) FROMSC GROUPBYS# 试判断下列查询和更新是否允许执行。 若允许,写岀转换到基本表SC上的相应操作。 (1)SELECT* FROMS_GRADE 允许 SELECTS#,COUNT(C#),AVG(GRADE)FROMSCGROUPBYS# (2)SELECTS#,C—NUM FROMSGRADE WHEREAVG—GRADE>80 允许 SELECTS#,COUNT(C#)FROMSCWHEREAVG(GRADE)>80 (3)SELECTS#,AVG—GRADE FROMS_GRADE WHEREC_NUM>(SELECTC—NUM FROMS_GRADE WHERES#='S4') 允许 SELECTS#,AVG(GRADE) FROMSCASX WHERECOUNT(X.C#)>(SELECTCOUNT(Y.C#)FROMSCASYWHERE Y.S#='S4') GROUPBYS# (4)UPDATES_GRADE SETC_NUM =C_NUM+1 WHERES#= ‘S4' 不允许 (5)DELETEFROMS_GRADE WHEREC_NUM>4 不允许
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 基本知识 第五 课后 答案 解析