【网学网提醒】:以下是网学会员为您推荐的数据库期末复习资料-sql,希望本篇文章对您学习有所帮助。
对于教学数据库的三个基本表
学生S(S#,SNAME,AGE,SEX)
学习SC(S#,C#,GRADE)
课程C(C#,CNAME,TEACHER)
试用SQL的查询语句表达下列查询:
(1)检索LIU老师所授课程的课程号和课程名。
(2)检索年龄大于23岁的男学生的和。
(3)检索至少选修LIU老师所授课程中一门课程的女学生。
(4)检索WANG同学不学的课程的课程号。
(5)检索至少选修两门课程的学生。
(6)检索全部学生都选修的课程的课程号与课程名。
(7)检索选修课程包含LIU老师所授课的学生。
设有两个基本表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))
设有两个基本表R(A,B,C)和S(A,B,C)试用SQL查询语句表达下列关系代数表达式:
(1)R∪S(2)R∩S(3)R-S(4)πA,B(R)πB,C(S)
试用SQL查询语句表达下列对教学数据库中三个基本表S、SC、C的查询:
学生S(S#,SNAME,AGE,SEX)
学习SC(S#,C#,GRADE)
课程C(C#,CNAME,TEACHER)
(1)统计有学生选修的课程门数。
(2)求选修C4课程的学生的平均年龄。
(3)求LIU老师所授课程的每门课程的学生平均成绩。
(4)统计每门课程的学生选修人数(超过10人的课程才统计)。要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列。
(5)检索比WANG同学大,而年龄比他小的学生。
(6)检索以WANG打头的所有学生的和年龄。
(7)在SC中检索成绩为空值的学生和课程号。
(8)求年龄大于女同学平均年龄的男学生和年龄。
(9)求年龄大于所有女同学年龄的男学生和年龄。
试用SQL更新语句表达对教学数据库中三个基本表S、SC、C的各个更新操作:
(1)往基本表S中插入一个学生元组(‘S9’,‘WU’,18)。
(2)在基本表S中检索每一门课程成绩都大于等于80分的学生、和性别,并把检索到的值送往另一个已存在的基本表STUDENT(S#,SANME,SEX)。
(3)在基本表SC中删除尚无成绩的选课元组。
(4)把WANG同学的学习选课和成绩全部删去。
(5)把选修MATHS课不及格的成绩全改为空值。
(6)把低于总平均成绩的女同学成绩提高5%。
(7)在基本表SC中修改C4课程的成绩,若成绩小于等于75分时提高5%,若成绩大于
75分时提高4%(用两个UPDATE语句实现)。“仓库管理”关系模型有五个关系模式:零件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语句定义上述五个基本表,并说明主键和外键。(2)试将PROGECT、P_P、PART三个基本表的自然联接定义为一个视图VIEW1,PART、P_S、SUPPLIER三个基本表的自然联接定义为一个视图VIEW2。(3)试在上述两个视图的基础上进行数据查询:1)检索上海的供应商所供应的零件的编号和名字。2)检索项目J4所用零件的供应商编号和名字。对于教学数据库中基本表SC,已建立下列视图:
CREATEVIEWS_GRADE(S#,C_NUM,AVG_GRADE)
ASSELECTS#,COUNT(C#),AVG(GRADE)
FROMSC
GROUPBYS#
试判断下列查询和更新是否允许执行。若允许,写出转换到基本表SC上的相应操作。
(1)SELECT*
FROMS_GRADE
(2)SELECTS#,C_NUM
FROMS_GRADE
WHEREAVG_GRADE>80
(3)SELECTS#,AVG_GRADE
FROMS_GRADE
WHEREC_NUM>(SELECTC_NUM
FROMS_GRADE
WHERES#=‘S4’)
(4)UPDATES_GRADE
SETC_NUM=C_NUM+1
WHERES#=‘S4’
(5)DELETEFROMS_GRADE
WHEREC_NUM>4
对于教学数据库的三个基本表学生S(S#,SNAME,AGE,SEX)学习SC(S#,C#,GRADE)课程C(C#,CNAME,TEACHER)
试用SQL的查询语句表达下列查询:
(1)检索LIU老师所授课程的课程号和课程名。SELECTC#,CNAMEFROMCWHERETEACHER=?LIU?
(2)检索年龄大于23岁的男学生的和。SELECTS#,SNAMEFROMSWHERE(AGE>23)AND(SEX=?M?)
(3)检索至少选修LIU老师所授课程中一门课程的女学生。SELECTSNAMEFROMSWHERESEX=?F?ANDS#IN(SELECTS#FROMSCWHEREC#IN(SELECTC#FROMCWHERETEACHER=?LIU?)NOTICE:有多种写法,比如联接查询写法:
SELECTSNAMEFROMS,SC,CWHERESEX=?F?ANDSC.S#=S.S#ANDSC.C#=C.C#ANDTEACHER='LIU'但上一种写法更好一些。(4)检索WANG同学不学的课程的课程号。SELECTC#FROMCWHEREC#NOTIN(SELECTC#FROMSCWHERES#IN(SELECTS#FROMSWHERESNAME='WANG'))
(5)检索至少选修两门课程的学生。SELECTDISTINCTX.SNOFROMSCX,SCYWHEREX.SNO=Y.SNOANDX.CNO<>Y.CNONotice:对表SC进行自连接,X,Y是SC的两个别名。
(6)检索全部学生都选修的课程的课程号与课程名。SELECTC#,CNAMEFROMCWHERENOTEXISTS(SELECT*FROMSWHERES#NOTIN(SELECT*FROMSCWHERESC.C#=C.C#))要从语义上分解:(1)选择课程的课程号与课程名,不存在不选这门课的同学。其中,“不选这门课的同学”可以表示为:SELECT*FROMSWHERES#NOTIN
者或
SELECT*FROMSWHERENOT
(SELECT*FROMSCWHERESC.C#=C.C#)
EXISTS(SELECT*FROMSCWHERES.S#=C.S#ANDSC.C#=C.C#)
(7)检索选修课程包含LIU老师所授课的学生。SELECTDISTINCTS#FROMSCWHEREC#IN(SELECTC#FROMCWHERETEACHER='LIU'))
3.3设有两个基本表R(A,B,C)和S(D,E,F),试用SQL查询语句表达下列关系代数表达式:(1)πA(R)
(1)SELECTAFROMR(2)SELECT*FROMRWHEREB='17'(3)SELECTA,B,C,D,E,FFROMR,S(4)SELECTA,FFROMR,SWHERER.C=S.D
(2)σB='17'(R)(3)R×S(4))πA,F(σC=D(R×S))
3.43.4设有两个基本表R(A,B,C)和S(A,B,C)试用SQL查询语句表达下列关系代数表达式:(1)R∪S(2)R∩S(3)R-S(4)πA,B(R)πB,C(S)
(1)SELECTA,B,CFROMRUNIONSELECTA,B,CFROMS
(2)SELECTA,B,CFROMR
INTERSECTSELECTA,B,CFROMS
(3)SELECTA,B,CFROMRWHERENOTEXISTS(SELECTA,B,CFROMSWHERER.A=S.AANDR.B=S.BANDR.C=S.C)
(4)SELECTR.A,R.B,S.CFROMR,SWHERER.B=S.B
3.5试叙述SQL语言的关系代数特点和元组演算特点。
(P61-62)
3.6试用SQL查询语句表达下列对教学数据库中三个基本表S、SC、C的查询:
(1)统计有学生选修的课程门数。SELECTCOUNT(DISTINCTC#)FROMSC
(2)求选修C4课程的学生的平均年龄。SELECTAVG(AGE)FROMSWHERES#IN(SELECTS#FROMSCWHEREC#='C4')或者,SELECTAVG(AGE)FROMS,SCWHERES.S#=SC.S#ANDC#='004'
(3)求LIU老师所授课程的每门课程的学生平均成绩。SELECTCNAME,AVG(GRADE)
FROMSC,CWHERESC.C#=C.C#ANDTEACHER='LIU'GROUPBYC#
(4)统计每门课程的学生选修人数(超过10人的课程才统计)。要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列。SELECTDISTINCTC#,COUNT(S#)FROMSCGROUPBYC#HAVINGCOUNT(S#)>10ORDERBY2DESC,C#ASC
(5)检索比WANG同学大,而年龄比他小的学生。SELECTX.SNAMEFROMSASX,SASYWHEREY.SNAME='WANG'ANDX.S#>Y.S#ANDX.AGE
(6)检索以WANG打头的所有学生的和年龄。SELECTSNAME,AGEFROMSWHERESNAMELIKE'WANG%'
(7)在SC中检索成绩为空值的学生和课程号。SELECTS#,C#FROMSCWHEREGRADEISNULL
(8)求年龄大于女同学平均年龄的男学生和年龄。SELECTSNAME,AGEFROMSASXWHEREX.SEX='男'ANDX.AGE>(SELECTAVG(AGE)FROMSASYWHEREY.SEX='女')
(9)求年龄大于所有女同学年龄的男学生和年龄。SELECTSNAME,AGEFROMSASX
WHEREX.SEX='男'ANDX.AGE>ALL(SELECTAGEFROMSASYWHEREY.SEX='女')
3.7试用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,SEXFROMSWHERENOTEXISTS
(SELECT*FROMSCWHEREGRADE<80ANDS.S#=SC.S#)
(3)在基本表SC中删除尚无成绩的选课元组。DELETEFROMSCWHEREGRADEISNULL
(4)把WANG同学的学习选课和成绩全部删去。DELETEFROMSCWHERES#IN(SELECTS#FROMSWHERESNAME='WANG')
(5)把选修MATHS课不及格的成绩全改为空值。UPDATESCSETGRADE=NULLWHEREGRADE<60ANDC#IN(SELECTC#FROMCWHERECNAME='MATHS')
(6)把低于总平均成绩的女同学成绩提高5%。UPDATESCSETGRADE=GRADE*1.05
WHEREGRADE<(SELECTAVG(GRADE)FROMSC)ANDS#IN(SELECTS#FROMSWHERESEX='F')
(7)在基本表SC中修改C4课程的成绩,若成绩小于等于75分时提高5%,若成绩大于75分时提高4%(用两个UPDATE语句实现)。UPDATESCSETGRADE=GRADE*1.05WHEREC#='C4'ANDGRADE<=75UPDATESCSETGRADE=GRADE*1.04WHEREC#='C4'ANDGRADE>75
3.8在第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)ASSELECTPROJECT.J#,JNAME,DATE,PART.P#,PNAME,COLOR,WEIGHT,TOTALFROMPROJECT,PART,P_PWHEREPART.P#=P_P.P#ANDP_P.J#=PROJECT.J#
CREATEVIEWVIEW2(P#,PNAME,COLOR,WEIGHT,S#,SNAME,SADDR,QUANTITY)ASSELECTPART.P#,PNAME,COLOR,WEIGHT,SUPPLIER.S#,SNAME,SADDR,QUANTITYFROMPART,P_S,SUPPLIERWHEREPART.P#=P_S.P#ANDP_S.S#=SUPPLIER.S#
(3)试在上述两个视图的基础上进行数据查询:
1)检索上海的供应商所供应的零件的编号和名字。SELECTP#,PNAMEFROMVIEW2WHERESADDR='SHANGHAI'
2)检索项目J4所用零件的供应商编号和名字。SELECTS#,SNAMEFROMVIEW2WHEREP#IN(SELECTP#FROMVIEW1WHEREJ#='J4')
3.9对于教学数据库中基本表SC,已建立下列视图:CREATEVIEWS_GRADE(S#,C_NUM,AVG_GRADE)
ASSELECTS#,COUNT(C#),AVG(GRADE)FROMSCGROUPBYS#
试判断下列查询和更新是否允许执行。若允许,写出转换到基本表SC上的相应操作。(1)SELECT*
FROMS_GRADE允许SELECTS#,COUNT(C#),AVG(GRADE)FROMSCGROUPBYS#
(2)SELECTS#,C_NUM
FROMS_GRADEWHEREAVG_GRADE>80允许SELECTS#,COUNT(C#)FROMSCWHEREAVG(GRADE)>80
(3)SELECTS#,AVG_GRADE
FROMS_GRADEWHEREC_NUM>(SELECTC_NUM
FROMS_GRADEWHERES#=?S4?)允许SELECTS#,AVG(GRADE)FROMSCASXWHERECOUNT(X.C#)>(SELECTCOUNT(Y.C#)FROMSCASYWHEREY.S#='S4')GROUPBYS#
(4)UPDATES_GRADESETC_NUM=C_NUM+1
WHERES#=?S4?不允许
(5)DELETEFROMS_GRADE
WHEREC_NUM>4不允许
3.10预处理方式对于嵌入式SQL的实现有什么重要意义?
预处理方式是先用预处理程序对源程序进行扫描,识别出SQL语句,并处理成宿主语言的函数调用形式;然后再用宿主语言的编译程序把源程序编译成目标程序。这样,不用扩充宿主语言的编译程序,就能处理SQL语句。
3.11在宿主语言的程序中使用SQL语句有哪些规定?
在宿主语言的程序中使用SLQ语句有以下规定:(1)在程序中要区分SQL语句与宿主语言语句(2)允许嵌入的SQL语句引用宿主语言的程序变量(称为共享变量),但有两条规定:1)引用时,这些变量前必须加“:”作为前缀标识,以示与数据库中变量有区别。2)这些变量由宿主语言的程序定义,并用SQL的DECLARE语句说明。(3)SQL的集合处理方式与宿主语言单记录处理方式之间要协调。需要采用游标机制,把集合操作转换成单记录处理方式。
3.12SQL的集合处理方式与宿主语言单记录处理方式之间如何协调?
由于SQL语句处理的是记录集合,而宿主语言语句一次只能处理一个记录,因此需要用游标(cousor)机制,把集合操作转换成单记录处理方式。
2.13嵌入式SQL语句何时不必涉及到游标?何时必须涉及到游标?
(1)INSERT、DELETE、UPDATE语句,查询结果肯定是单元组时的SELECT语句,都可直接嵌入在主程序中使用,不必涉及到游标。(2)当SELECT语句查询结果是多个元组时,此时宿主语言程序无法使用,一定要用游标机制把多个元组一次一个地传送给宿主语言处理。
这个跟文章无关呵呵
电动葫芦: