《数据库原理复习题(共11页).docx》由会员分享,可在线阅读,更多相关《数据库原理复习题(共11页).docx(11页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上精品一、一个图书馆理系统中有如下信息:图书:书号、书名、数量、位置借书人:借书证号、姓名、单位出版社:出版社名、邮编、地址、电话、E-mail其中约定:任何人可以借多种书,任何一种书可以被多个人借,借书和还书时,要登记相应的借书日期和还书日期;一个出版社可以出版多种书籍,同一本书仅为一个出版社所出版,出版社名具有惟一性。根据以上情况,完成如下设计:(1)设计系统的E-R图;5分(2)将E-R图转换为关系模式;3分(3)指出转换后的每个关系模式的关系键(主键,外键)。2分解答:(1书号书名数量位置社名邮编地址图书出版出版社N1N借书日期借阅还书日期电话E_mailM借书
2、人借书证号姓名单位图书关系模式:图书(书号,书名,数量,位置,出版社名)关系主键:书号外键:出版社名借书人关系模式:借书人(借书证号,姓名,单位)关系主键:借书证号出版社关系模式:出版社(出版社名,邮编,地址,电话,E-mail)关系主键:出版社名借阅关系模式:借阅(借书证号,书号,借书日期,还书日期)关系主键:(借书证号,书号)外键1:借书证号外键2:书号二、有一个学生课程数据库,数据库中包括三个表:学生表(学号,姓名,性别,年龄,所在系)课程表(课程号,课程名,先修课号,学分)成绩表(学号,课程号,成绩)专心-专注-专业精品用SQL语言编写实现下列功能的代码:1、建立一个学生表,要求设置学
3、号属性为主键,规定年龄大于2、查询年龄在20至23岁之间的学生的姓名、系别、和年龄。3、查询各系的人数及平均年龄。4、计算“数据库原理”课程的学生平均成绩。5、将计算机科学系全体学生的成绩置零。6、创建一个“经济系”全体学生的视图V_JJX。7、创建一个自定义函数,可以求解任意数n的阶乘累加和,即计算+n!,并用n=10调用该函数。8、建一个规则,并将其绑定到学生表的所在系列上,规定取值为(16。S=1!+2!+3!+经济系,管理系,机电系 ,信息系)之一。9、创建一个触发器,要求当更新课程表的课程号时,能更新成绩表中相应的课程号。答案:1、建立一个学生表。CREATETABLE学生表(学号C
4、HAR(5)PRIMARYKEY,姓名CHAR(20),性别CHAR(2),年龄INTCHECK(所在系CHAR(15)年龄16),2、查询年龄在20至23岁之间的学生的姓名、系别、和年龄SELECT姓名,所在系,年龄FROM学生表WHERE年龄BETWEEN20AND233、查询各系的人数及平均年龄。SELECT所在系,COUNT(*),AVG(年龄)FROM学生表GROUPBY所在系4、计算数据库应用课程的学生平均成绩SELECTAVG(成绩)FROM成绩表WHERE课程号in(SELECT课程号WHERE课程名=FROM课程表数据库应用)5、将计算机科学系全体学生的成绩置零UPDATE成
5、绩表SET成绩=0WHERE学号in(SELECT学号FROM学生表WHERE所在系=计算机科学系6、createviewV_JJXasselect*from学生表)WHERE所在系=经济系7、CREATEFUNCTIONF_C(nINT)RETURNSBIGINTASBEGIN精品DECLAREiint,pbigint,sbigintSELECTi=1,p=1,s=0WHILEi=nBEGINSETp=p*iSETs=s+pSETi=i+1ENDReturnSENDGoselectdbo.F_C(10)-调用8.Createruler_szxaszcin(经济系,管理系,机电系,信息系)go
6、execsp_bindruler_szx,学生表.所在系9、Createtriggertr_up_kconkcForupdateAsDeclarekh_oldchar(3),kh_newchar(3)Selectkh_old=deleted.课程号,kh_new=inserted.Fromdeletedd,insertediWhered.课程名=i.课程名Updatexs_kcset课程号=kh_new课程号Where课程号=kh_old工程名称修路A段铺路B段精品三、现有关系数据库如下:数据库名:工程管理职工表(职工编号char(6),姓名,性别,民族,工资,身份证号)工程表(工程号char
7、(6),名称)参加表(ID,职工编号,工程号,天数)用SQL语言实现下列功能的sql语句代码:1.创建数据库,名为工程管理,其它参数可自己指定(5分)。2.创建上述三表的代码(12分);要求使用以下约束:主键(职工表.职工编号,工程表.工程号)、外键(参加表.职工编号,参加表.工程号)、默认(民族:汉族)、非空(姓名)、唯一(身份证号)、检查(性别、天数在0200之间),自动编号(ID)3插入、修改与删除记录操作(12分):(1)向工程表插入:工程号( 2)修改工程号为的工程名称为:基座打桩( 3)删除工程号为的工程信息4.创建名为参加表视图的视图(姓名,工程名称,天数);(8分)5. 创建名
8、为某工程参加职工的内嵌表值函数,完成输入一项工程号,返回表中含有参加该工程的职工的职工姓名、性别、工资、身份证号和天数;(5分)调用函数检索:所有参加这项工程的职工姓名;(3分)。6. 创建名为职工参加天数的存储过程:在参加表视图中查找某给定姓名的职工参加所有工程的总天数。(5分)执行存储过程:计算职工“张明”的总天数。(3分)7创建一个名为GZ_RULE的规则,并将其绑定到职工表的工资列上,规定取值为1000元到3000元之间。(6分)8.创建一个名为del_tr的触发器,如果某人参加工程的天数不为0,就不能删除该职工的信息,即回滚撤销删除。(6分)1.createdatabaseuse工程
9、管理go工程管理-(5分)2.createtable职工表-(5分)(编号char(6)primarykey,姓名nchar(4)notnull,性别nchar(1)check(民族nchar(8)default性别in(男,汉族notnull,女),工资nchar(12),身份证号char(18)unique)精品createtable工程表-(2分)(工程号char(6)primarykey,工程名称char(40)notnull)createtable参加表(IDIDENTITY(1,1),职工编号char(6)references工程号char(6)references天数intche
10、ck(天数)-职工表(职工编号工程表(工程号),between0and200)(4),分)3.insertinsertupdatedelete工程表工程表工程表工程表values(,修路values(,铺路set名称=基座打桩wherewhere工程号=A段)B段)工程号=4.createviewselect姓名,where职工表.参加表视图as工程名称,天数from职工表,参加表,工程表职工编号=参加表.职工编号AND职工表.编号=参加表.职工编号5.createfunction某工程参加职工(工程号varchar(6)returnstableasreturn(selectfromwhere
11、姓名、性别、工资、身份证号,天数职工表.编号=参加表.职工编号AND工程号=工程号)goselect*from某工程参加职工()6.createprocedure职工参加天数职工名nchar(16)asbeginselectsum(天数)from参加表视图where姓名=职工名endgoexecute职工参加天数张明7.createrulegz_rule_asGZBETWEEN1000AND3000gosp_bindrulegz_rule,职工表.工资8.Createtriggerdel_tronFordelete职工表AsBegin精品If(select天数from参加表where职工号in
12、(select职工号fromdeleted)0Rollbackend四、1、计算1+2*3+4*5+6*7+96*97+98*99的和,并使用PRINT显示计算结果。DECLAREIint,sumint,csumchar(10)SELECTI=_,sum=_WHILEI=_BEGINSELECTI=_SELECTsum=_ENDSELECTcsum=convert(char(10),sum)_1+2*3+4*5+6*7+96*97+98*99=+csum2、假定某单位有一工资数据表,表名为GZ,部分数据如下:工号姓名基本工资津贴公积金养老保险失业保险医疗保险1001程鑫1,200.00100.
13、0010.0030.0020.0020.001002李倩如1,100.00123.0012.0023.0023.0021.001103张大宏1,111.00121.0012.0021.0021.0012.001104赵楠欣1,212.00211.0013.0031.0031.0032.00对以上数据表要做如下处理:如果平均岗位津贴低于150元,则使用有人的岗位津贴加10元,如果最高岗位津贴超过300元,则退出WHILEUSETESTGODECLAREavgjtdecimal(4,1)WHILE_300BEGINPRINT最高岗位津贴超过300元_-中途退出WHILE循环ENDWHILE循环。循环将所ENDSELECTavgjt=AVG(岗位津贴)FROMGZPRINT岗位津贴增加完毕,平均岗位津贴为:+STR(avgjt,4,1)3. 给定一个身份证号,返回其中的省份编码和生日数据。DECLAREsfzhchar(18)SETsfzh=PRINT省份编码是:+PRINT生日数据是:+精品GO