版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
-=============================================11章习题一、选择题1.下列四项中,不属于数据库系统优点的是()。A.实现数据共享B.确保数据的安全性与**性C.控制数据冗余D.数据依赖程序2.数据库系统中,对用户使用的数据视图的描述称为()。A.概念模式B.内模式C.存储模式D.外模式3.下列四项中,不属于数据库特点的是( )。A.数据共享 B.数据完整性C.数据冗余很高 D.数据独立性高4.数据库的三级模式之间存在着两级映像,使数据库系统具有较高的数据()。A.相容性B.独立性C.共享性D.一致性5.数据库系统的三级模式结构中,定义索引的组织方式属于( )。A.概念模式B.外模式C.逻辑模式D.内模式6.E-R模型属于( )。A.概念模型B.层次模型C.网状模型D.关系模型7.学生社团可以接纳多名学生参加,但每个学生只能参加一个社团,从社团到学生之间的联系类型是( )。A.多对多 B.一对一C.多对一 D.一对多8.反映现实世界中实体及实体间联系的信息模型是( )。A.关系模型 B.层次模型C.网状模型 D.E-R模型二、设计题1.*医院病房计算机管理中需要如下信息:科室:科名,科地址,科,医生**病房:病房号,床位号,所属科室名医生:**,职称,所属科室名,年龄,工作证号病人:病历号,**,性别,诊断,主管医生,病房号其中,一个科室有多个病房、多个医生,一个病房只能属于一个科室,一个医生只属于一个科室,但可负责多个病人的诊治,一个病人的主管医生只有一个。设计该计算机管理系统的E-R图,并注明属性和联系类型。2.假设*公司的业务规则如下:(1)公司下设几个部门,如技术部、财务部、市场部等。(2)每个部门承担多个工程项目,每个工程项目属于一个部门。(3)每个部门有多名职工,每一名职工只能属于一个部门。(4)一个部门可能参与多个工程项目,且每个工程项目有多名职工参与施工。根据职工在工程项目中完成的情况发放酬金。(5)工程项目有工程号、工程名两个属性;部门有部门号、部门名称两个属性;职工有职工号、**、性别属性。. z.-请根据上述规则设计E-R模型。*公司的业务规则如下:(1)每位职工可以参加几个不同的工程,且每个工程有多名职工参与;(2)每位职工有一个职位,且多名职工可能有相同的职位;(3)职位决定小时工资率,公司按职工在每一个工程中完成的工时,计算酬金;(4)职工的属性有职工号、**、职位和小时工资率;(5)工程的属性有工程号和工程名称。试根据上述业务规则设计E-R模型。答案:一、选择题 DDCBDADD二、设计题1.2.3.===================================================2第3章习题1.学校有若干个系,每个系有若干班级和教研室,每个教研室有若干教师,每名教师只教一门课,每门课可由多个教师教;每个班有若干学生,每个学生选修若干课程,每门课程可由若干学生选修。请用E-R图画出该学校的概念模型,注明联系类型,再将E-R模型转换为关系模型。2.工厂生产的每种产品由不同的零件组成,有的零件可用于不同的产品。这些零件由不同的原材料制成,不同的零件所用的材料可以相同。一个仓库存放多种产品,一种产品存放在一个仓库中。零件按所属的不同产品分别放在仓库中,原材料按照类别放在若干仓库中(不跨仓库存放)。请用E-R图画出此关于产品,零件,材料,仓库的概念模型,注明联系类型,再将E-R模型转换为关系模型。3.一个图书馆管理系统中有如下信息:图书:书号、书名、数量、位置借书人:借书证号、**、单位:名、邮编、地址、、其中约定:任何人可以借多种书,任何一种书可以被多个人借,借书和还书时,要登记相应的借书日期和还书日期;一个可以出版多种书籍,同一本书仅为一个所出版,名具有唯一性。根据以上情况,完成如下设计:(1)设计系统的E-R图;(2)将E-R图转换为关系模式;(3)指出转换后的每个关系模式的关系键。答案假定:主码用____表示外码用表示该E-R图可以转换为以下关系模式:学院(院名,地址,成立日期,教师人数,学生人数)7个实体各自为一个关系系(系名,系址,系主任,院名)模式,6个1:N的联系没班级(班号,专业名,入学年份,学生数,班级导师,系名)有成为一个独立的关系模学生(**,**,性别,出生日期,联系,籍贯,班号)式,全部合并到多方实体. z.-教研室(教研室名称,教师人数,,办公室编号,系名)教师(教工号,**,性别,出生日期,联系,教研室名称,课号)课程(课号,课名,学时,学分,开课学期,必修课否)选修(**,课号,成绩)2.1个M:N的联系必须成为一个独立的关系模该E-R图可以转换为以下关系模式:产品(产品名,型号,重量,仓库号,数量c)4个实体各自为一个关系模式,2零件(零件名,规格)个1:N的联系没有成为一个独立的材料(材料编号,名称,仓库号,数量a)关系模式,而是合并到多方实体,仓库(仓库号,地点,面积,保管员)合并时包括联系得属性产品-零件(产品名,零件名,组装日期b)零件-材料(材料编号,零件名,生产日期a)零件-仓库(零件名,仓库号,数量b)3个M:N的联系必须成为一个独立的关系模3.E-R图可以转换为以下关系模式:图书(书号,书名,数量,位置,名)借书人(借书证号,**,单位)(名,邮编,地址,,)借阅(借书证号,书号,借书日期,还书日期)===================================================3第5章习题1.试用T-SQL语言创建ZYGL(职员管理)数据库,要求数据文件的初始大小为1MB,最大大小为50MB,增长方式按10%增长;日志文件的初始大小为3MB,按1MB增长。2.试用T-SQL语言修改ZYGL数据库的主数据文件,将增长方式修改为按5MB增长。3.试用T-SQL语言修改ZYGL数据库,为ZYGL增加一个数据文件ZYGLBAK。4.试用T-SQL语言删除ZYGL数据库。--1.CREATEDATABASEzyglON(NAME='zygl_Data',SIZE=1,MA*SIZE=30,FILEGROWTH=10%)LOGON(NAME='zygl_Log',SIZE=3,FILEGROWTH=1)GO--2ATLERDATABASEZYGLMODIFYFILENAME=ZYGL_DATA,FILEGROWTH=5)--3. z.-ATLERDATABASEZYGLADDFILE(NAME=ZYGLBAK,SIZE=1,MA*SIZE=50,FILEGROWTH=10%)--4DROPDATABASEZYGL===================================================46章习题设计题现有一个数据库scd,库中包含以下系、学生、班级各表:student(**,**,年龄,班号)class(班号,专业名,系名,入学年份)department(系号,系名)假设表中将有如下数据:student(2008101,*山,18,101;2008102,李斯,16,102;2008103,王玲,17,111;2008105,李飞,19,112)class(101,软件,计算机,2005;102,微电子,计算机,2006;111,无机化学,化学,2004;112,高分子化学,化学,2006)department(001,数学;002,计算机;003,化学)1.用SQL语言创建以上各数据表,在定义中要求为每一字段(列)选择合适的数据类型和长度,并设置适当的约束,即声明:(1)每个表的主键和所有可能的外键。(2)学生**不能为空。(3)系部系名不能为空,且唯一。(4)学生的年龄介于15到40岁之间,默认为18。2.试用SQL语言完成下列功能:(1)学校又新增加了两个系部:一个物理系,编号为006,一个经济系,编号为008。(2)将入学年份在2004年以前的班级删除。(3)学生*山转到111班,请更新相关的表。(4)为每个学生的年龄增加1岁,请更新相关的表。3.试用SQL语言修改表结构:由于年龄可以通过出生日期计算而来,对student表删除“年龄”字段,增加一个“出生. z.-日期”字段。(提示:必须先删除对年龄的检查约束,才能删除年龄列)答案--1.createdatabasescdgoUsescdGoCREATETABLEdepartment(系号char(3)PRIMARYKEY,系名char(20)notnullunique)GoCREATETABLEclass(班号char(3)PRIMARYKEY,专业名char(20),系名char(20)referencesdepartment(系名),入学年份int)GoCREATETABLEstudent(**char(7)PRIMARYKEY,**char(8)NOTNULL,年龄intconstraintck_nlCHECK(年龄>=15and年龄<=40)constraintdf_nlDEFAULT18, --指定约束名ck_nl和df_nl,以便以后好删除班号char(3)referencesclass(班号))Insertintodepartmentvalues('001','数学');Insertintodepartmentvalues('002','计算机');Insertintodepartmentvalues('003','化学')Insertintoclassvalues('101','软件','计算机',2005);Insertintoclassvalues('102','微电子','计算机',2006);Insertintoclassvalues('111','无机化学','化学',2004);Insertintoclassvalues('112','高分子化学','化学',2006)Insertintostudentvalues('2008101','*山',18,'101');Insertintostudentvalues('2008102','李斯',16,'102');Insertintostudentvalues('2008103','王玲',17,'111')Insertintostudentvalues('2008104','李飞',19,'112')--2.--1)Insertintodepartmentvalues(‘006’,’物理系‘)Insertintodepartmentvalues(‘008’,’经济系‘)--2)Deleteclasswhere入学年份<2004--3)Updatestudentset班号='111'where**='*山'. z.---4)Updatestudentset年龄=年龄+1--3.--1)--要删除年龄列,应先删除该列上的约束,再删除Altertablestudentdropconstraintck_nl,df_nl--删除年龄列Altertablestudentdropcolumn年龄Altertablestudentadd出生日期datetime--2)AltertableclassAdd班长**char(7)referencesstudent(**)===================================================57章习题设计题以下各题在CJGL数据库中实现:查询“数据库原理”这门课程的学分和开课学期。查询身高在175cm以上的男生信息。查询所有姓“李”同学的基本情况。查询至少选修了两门课程的学生**。将所有学生信息按身高逆序输出。查询平均成绩在75分以上的学生**、性别和专业。查询“李林”同学没学过的课程号。查询有两门课以上不及格的学生**。检索选修课程包含“程明”同学所选课程之一的学生**。检索同时选修了课程号为101和102这两门课程的学生**。检索选修课程名为“数据库原理”的学生**和**。12*.查询每门课得最高分的学生**。13*.检索选修课程包含**为081103的学生所修全部课程的学生**。创建一个名为avg75的视图,包含所有平均成绩在75分以上的学生信息。答案1.查询“数据库原理”这门课程的学分和开课学期。Select课程号,开课学期FromkcWhere课程名=’数据库原理’2.查询身高在175cm以上的男生信息。Select*From*sWhere性别=’男’and身高>1753.查询所有姓“李”同学的基本情况。Select*From*sWhere**like‘李%’4.查询至少选修了两门课程的学生**。Select**. z.-From*s_kcGroupby**Havingcount(课程号)>=25.将所有学生信息按身高逆序输出。Select*From*sOrderby身高desc检索平均成绩在75分以上的学生**、性别和专业。方法一:Select**,性别,专业名From*sWhere**in(Select**From*s_kcGroupby**Havingavg(成绩)>75)方法二:Select**,性别,专业名From*s_kcJOIN*sON*s.**=*s_kc.**Groupby*s.**,**,性别,专业名Havingavg(成绩)>757.检索“李林”同学不学的课程号。Select课程号FromkcWhere课程号notin(Select课程号from*s,*s_kcWhere*s.**=*s_kc.**and*s.**=’李林’)8.查询只有两门课不及格的学生**。Select**From*sWhere**in(Select**From*s_kcWhere成绩<60Groupby**Havingcount(课程号)=2)9.检索选修课程包含“程明”同学所选课程之一的学生**。Selectdistinct**From*s_kcWhere课程号in(Select课程号from*s,*s_kcWhere*s.**=*s_kc.**and*s.**=’程明’)10.检索同时选修了课程号为101和102这两门课程的学生**。select*from*s_kc------------------错误写法:. z.-Select**From*s_kcWhere课程号='101'or课程号='102'Select**From*s_kcWhere课程号='101'and课程号='102'-------------------------------------------方法一,使用自连接:方法一,使用自连接:Selecta.**From*s_kca,*s_kcbWherea.**=b.**anda.课程号='101'andb.课程号='102'方法二,使用子查询:Select**From*sWhere**in(select**From*s_kcwhere课程号='101')And**in(select**From*s_kcwhere课程号='102')方法三、Select**From*s_kcWhere课程号='101'or课程号='102'groupby**havingcount(**)=2检索选修课程名为“数据库原理”的学生**和**。Selecta.**,**From*sa,*s_kcb,kccWherea.**=b.**andb.课程号=c.课程号and课程名=’数据库原理’查询每门课的最高分的学生**。相关查询法SELECTA.**,**,B.课程号,成绩FROM*SA,*S_KCBWHEREA.**=B.**AND成绩=(SELECTMA*(成绩)FROM*S_KCCWHEREB.课程号=C.课程号)或派生表法SELECTA.**,B.课程号,B.成绩,C.最高成绩FROM*SA,*S_KCB,(SELECT课程号,MA*(成绩)最高成绩FROM*S_KCgroupby课程号)CWHEREA.**=B.**ANDB.课程号=C.课程号andB.成绩=C.最高成绩检索选修课程包含**为081101的学生所修课程的学生**。方法一,selectdistinct**from*s_kcwhere课程号in(select课程号from*s_kcwhere**='081101')groupby**. z.-havingcount(课程号)=(selectcount(课程号)from*s_kcwhere**='081101')方法二,SELECT**,**FROM*sWHERENOTE*ISTS(SELECT*FROMkc,*s_kcaWHEREkc.课程号=a.课程号and**=’081103’andNOTE*ISTS(SELECT*FROM*s_kcbWHEREb.**=*s.**AND课程号=kc.课程号))创建一个名为avg75的视图,包含所有平均成绩在75分以上的学生信息。Createviewavg75AsSelect*From*sWhere**in(Select**From*s_kcGroupby**Havingavg(成绩)>75)Createviewavg75AsSelect**,性别,专业名,avg(成绩)From*s_kcJOIN*sON*s.**=*s_kc.**Groupby**,性别,专业名Havingavg(成绩)>75===================================================6第8章习题对于数据库scd,库中包含以下系、学生、班级各表:student(**,**,年龄,班号)class(班号,专业名,系名,入学年份)department(系号,系名)请使用T-SQL语言完成以下各题。1.将student表的班号与**这两列组合创建一个升序的非聚集索引。2.为department表的系名建立一个唯一索引,如果输入了重复的键,将忽略该INSERT或UPDATE语句,并使用填充因子FILLFACTOR为50%。3.为数据库scd建立一个默认对象,使其对应于年龄为18,将其绑定到student表的年龄列上。4.为数据库scd建立一个规则对象,并将其绑定到学生表的专业名列上,规定专业. z.-名的取值只能为‘护理学’、‘地质勘探’和‘考古学’之一。5.修改class表为其建立一个CHECK约束,检查入学年份是否小于2009。答案1.将student表的班号与**这两列组合创建一个升序的非聚集索引。Createnonclusteredinde*i*_bj_*monstudent(班号asc,**asc)2.为department表的系名建立一个唯一索引,如果输入了重复的键,将忽略该INSERT或UPDATE语句,并使用填充因子FILLFACTOR为50%。Createuniqueinde*uqi*_*mondepartment(系名asc)WITHIGNORE_DUP_KEY,FILLFACTOR=503.为数据库scd建立一个默认对象,使其对应于年龄为18,将其绑定到student表的年龄列上。Createdefaultd_ageas18GoE*ecsp_bindefault‘d_age’,‘student.年龄’4.为数据库scd建立一个规则对象,并将其绑定到学生表的专业名列上,规定专业名的取值只能为‘护理学’、‘地质勘探’和‘考古学’之一。Createruler_zymaszymin(‘护理学’,‘地质勘探’,’考古学’)GoE*ecsp_bindrule‘r_zym’,‘student.专业名’5.修改class表为其建立一个CHECK约束,检查入学年份是否小于2008。AltertableclassAddconstraintck_r*nfcheck(入学年份<2008)==================================================79章习题1习题九三、设计题:1.使用流程控制语句编写程序:(1)在CJGL数据库中,使用case函数处理:如果课程的学时在80以上显示学习时间长,学时在54~80显示学习时间一般,否则显示学习时间短。(2)在CJGL数据库中,使用case函数处理:如果学生的专业是“计算机”,显示热门,是“通信工程”显示一般,否则显示冷门。(3)计算18!=18*17*16…*2*1。(4)计算S=1!+2!+3!+……+10!2.以下各题在CJGL数据库中实现:(1)创建一个自定义函数,可以求解任意数n的阶乘,即n!。并用n=10调用该函数。(2)分别用函数或存储过程实现以下功能:给定输入参数课程名,统计该课程成绩介于58~59分的学生人数。使用输入参数“数据库原理”调用该函数或该存储过程。(3)创建存储过程来完成求解给定*个学生的**返回该生的**和平均分的功能。(4)分别使用约束和触发器实现以下功能:检查在课程表中插入或修改的课程号是否在101~108之间。3.以下各题在第六章习题(设计题)给出的数据库SCD中实现:(1)创建一个自定义函数用于统计各班级的人数,将class表增加一个人数字段,然后调用该函数将人数定义为计算列。. z.-(2)创建一个可以按给定**输出学生的**、系名信息的存储过程。(3)创建一个触发器,当插入或更新*个学生的记录时,检查该班级的学生是否超过人,如果超过,就发出警告信息同时撤消所作的插入或更新操作。答案:三、设计题1.使用流程控制语句编写程序:(1)在CJGL数据库中,使用case函数处理:如果课程的学时在80以上显示学习时间长,学时在54~80显示学习时间一般,否则显示学习时间短。SELECT课程号,课程名,学习时间=CASEWHEN学时>=80THEN'学习时间长'WHEN学时>=54THEN'学习时间一般'ELSE‘学习时间短’ENDFROMKC(2)在CJGL数据库中,使用case函数处理:如果学生的专业是“计算机”,显示热门,是“通信工程”显示一般,否则显示冷门。SELECT**,**,专业热度=CASE专业名WHEN‘计算机’THEN'热门'WHEN‘通信工程’THEN'一般'ELSE'冷门'ENDFROM*s(3)计算18!=18*17*16…*2*1。DECLAREiint,pbigintSELECTi=1,p=1WHILEi<=18BEGINSETp=p*iSETi=i+1ENDPRINT'18*17*16…*2*1='+CAST(pASchar(20))(4)计算S=1!+2!+3!+……+10!DECLAREiint,pbigint,sbigintSELECTi=1,p=1,s=0WHILEi<=10BEGINSETp=p*iSETs=s+pSETi=i+1ENDPRINT'1!+2!+3!+……+10!='+CAST(sASchar(20))2.以下各题在CJGL数据库中实现:(1)创建一个自定义函数,可以求解任意数n的阶乘,即n!。并用n=10调用该函数。. z.-CREATEFUNCTIONF_C(nINT)RETURNSINTASBEGINDECLAREiint,pbigintSELECTi=1,p=1WHILEi<=nBEGINSETp=p*iSETi=i+1ENDReturnpENDGo--调用selectdbo.F_C(10)(2)分别用函数或存储过程实现以下功能:给定输入参数课程名,统计该课程成绩介58~59分的学生人数。使用输入参数“数据库原理”调用该函数或该存储过程。----函数:Createfunctionf_cj58(achar(20))returnsintAsBEGINDECLAREcintSELECTc=count(*)fromCJGL.dbo.*s_kca,CJGL.dbo.kcbwherea.课程号=b.课程号and课程名=aand(成绩between58and59)ReturncENDGo以下函数调用:Selectdbo.f_cj58(‘数据库原理’)as[58~59分人数]Go-----存储过程:createprocedurep_cj58achar(20),cintoutputasSELECTc=count(*)fromCJGL.dbo.*s_kca,CJGL.dbo.kcbwherea.课程号=b.课程号and课程名=aand(成绩between58and59)returnGo--存储过程调用DECLAREc1intE*ecp_cj58‘数据库原理’,c1output(3)创建存储过程来完成求解给定*个学生的**返回该生的**和平均分的功能。Createprocedurep_pjsnochar(8),snachar(8)output,savgintoutputas. z.-SELECTsna=**,savg=avg(成绩)fromCJGL.dbo.*sa,CJGL.dbo.*s_kcbwherea.**=b.**anda.**=snoGROUPBY**returnGo--调用DECLAREsnachar(8),savgintE*ecp_pj‘061101’,snaoutput,savgoutputSelectsna,savg(4)分别使用约束和触发器实现以下功能:检查在课程表中插入或修改的课程号是否101~108之间。---------------------------使用触发器CreatetriggerT_KConkcForINSERT,UPDATEAsDeclareochar(4)Selecto=课程号frominsertedIfonotlike’10[1-8]’rollbacktransactiongo----------------------------使用约束AltertalbekcAddconstraintck_khcheck(课程号like’10[1-8]’)3.以下各题在第六章习题(设计题)给出的数据库SCD中实现:(1)创建一个自定义函数用于统计各班级的人数,将class表增加一个人数字段,然后调用该函数将人数定义为计算列。USESCDGOCREATEFUNCTIONF_T(UMCHAR(8))RETURNSINTASBEGINDECLARETINTSELECTT=COUNT(*)FROMstudentWHERE班号=UMRETURNTENDGOUSESCD/*假定用户函数F_T在此数据库中已定义*/CREATETABLECLASS(班号CHAR(3)PRIMARYKEY,专业名CHAR(20),系名CHAR(20)REFERENCESDEPARTMENT(系名),入学年份INT人数ASDBO.F_T(班号). z.-)(2)创建一个可以按给定**输出学生的**、系名信息的存储过程。方法一:CREATEPROCEDURESTU_INFOSNOCHAR(7)ASSELECTA.**,**,系名FROMSTUDENTAINNERJOINCLASSBONA.班号=B.班号WHERE**=SNOGO调用:E*ECSTU_INFO'2008101'方法二:CREATEPROCEDURESTU_INFO_1SNOCHAR(6),SNACHAR(8)OUTPUT,DNACHAR(20)OUTPUTASSELECTSNA=**,DNA=系名FROMSTUDENTAINNERJOINCLASSBONA.班号=B.班号WHERE**=SNOGO调用:DECLARESNACHAR(8),DNACHAR(20)E*ECSTU_INFO'2008101',SNAOUTPUT,DNAOUTPUTSELECTSNA,DNA(3)创建一个触发器,当插入或更新*个学生的记录时,检查该班级的学生是否超过人,如果超过,就发出警告信息同时撤消所作的插入或更新操作。CreatetriggerT_stuonstudentForINSERT,UPDATEAsDeclareochar(4)Selecto=班号frominsertedIf(selectcount(*) fromstudentwhere班号=o)>50beginRaiserror('该班人数超过人,插入或修改已撤销.',16,1)RollbacktransactionendGO===================================================8第9章习题2在职员管理数据库ZYGL中完成以下操作:1.创建一个自定义数据类型ID_type,用于描述员工号,执行如下程序:. z.-USEZYGLE*ECsp_addtype'ID_type','char(3)','notnull'GO2.在SQLServer管理平台中通过表设计器修改职员表和工资表,对它们的“员工号”的数据类型使用自定义数据类型ID_type。3.创建一个自定义函数用于统计*部门的人数,部门名为函数的输入参数,如果没有该部门,则返回-1值。USEZYGLCREATEFUNCTIONtotal_rs(name_bmchar(10))RETURNSintASBEGINDECLAREnumintIFnotE*ISTS(SELECT*FROM部门表WHERE部门名=name_bm)SELECTnum=-1ELSESELECTnum=count(*)FROM职员表,部门表WHERE职员表.部门号=部门表.部门号and部门名=name_bmRETURNnumEND4.分别以部门名“办公室”和“销售科”调用函数total_rs:USEZYGLSELECTdbo.total_rs('销售科')AS部门人数记录结果。SELECTdbo.total_rs('办公室')AS部门人数记录结果。5.创建一个可以按给定员工**,输出其**、部门名及其工资信息的存储过程。USEZYGLIFE*ISTS(SELECTnameFROMsysobjectsWHEREname='yg_info'ANDtype='P')DROPPROCEDUREyg_infoGO/*创建存储过程*/CREATEPROCEDUREyg_infonamechar(8)ASSELECTa.员工号,**,部门名,应发工资,实发工资FROM职员表aINNERJOIN部门表bONa.部门号=b.部门号INNERJOIN工资表tONa.员工号=t.员工号WHERE**=nameGO6.调用yg_info存储过程查询员工'岳亮'的信息。USEZYGLE*ECyg_info'岳亮'7.创建一个触发器,当插入或更新*个员工的工资记录时,检查该员工的基本工资是否超过平均基本工资的三倍,如果超过,就发出警告信息同时撤消插入或更新。执行如下程序:. z.-USEZYGLIFE*ISTS(SELECTnameFROMsysobjectsWHEREname='reminder_gz'ANDtype='TR')DROPTRIGGERreminder_gzGOCREATETRIGGERreminder_gzON工资表FORINSERT,UPDATEASDECLAREgzdecimal(7,2),pjgzdecimal(7,2)SELECTgz=基本工资FROMinsertedSELECTpjgz=avg(基本工资)FROM工资表IFgz>pjgz*3BEGINROLLBACKTRANSACTION--撤消插入操作RAISERROR('该工资数据有误,超过平均值三倍,操作已经撤消!',16,10)/*返回一个错误信息*/ENDGO8.在SQLServer管理平台中打开ZYGL库的工资表,将001号员工的基本工资分别修改为2600与8600,看触发器的触发反应。===================================================910章习题1在职员管理数据库ZYGL中完成以下操作:1.采用游标的方式将每位员工的津贴提高20%。注意津贴的变化对实发工资和应发工资的影响。方法一:游标的非CURRENT形式的UPDATE语句USEZYGLGODECLAREidchar(3)DECLAREsalary_cursorCURSORFORSELECT员工号FROM工资表OPENsalary_cursorFETCHNE*TFROMsalary_cursorINTOidWHILEFETCH_STATUS=0BEGINUPDATE工资表SET津贴=津贴*1.2WHERE员工号=idFETCHNE*TFROMsalary_cursorINTOidENDCLOSEsalary_cursorDEALLOCATEsalary_cursorSELECT*FROM工资表GO方法二:游标的CURRENT形式的UPDATE语句USEZYGL. z.-GODECLAREsalary_cursorCURSORFORSELECT津贴FROM工资表OPENsalary_cursorFETCHNE*TFROMsalary_cursorWHILEFETCH_STATUS=0BEGINUPDATE工资表SET津贴=津贴*1.2WHERECURRENTOFsalary_cursorFETCHNE*TFROMsalary_cursorENDCLOSEsalary_cursorDEALLOCATEsalary_cursorSELECT*FROM工资表GO2.采用游标的方式查找每月实发工资最多的员工的**。USEZYGLGODECLAREidchar(3)DECLAREtemp_idchar(3)DECLAREsalarydecimal(9,2)DECLAREtemp_salarydecimal(9,2)DECLAREnamechar(8)DECLAREsalary_cursorCURSORFORSELECT员工号,实发工资FROM工资表OPENsalary_cursorFETCHNE*TFROMsalary_cursorINTOid,salarySETtemp_id=idSETtemp_salary=salaryWHILEFETCH_STATUS=0BEGINifsalary>temp_salaryBEGINSETtemp_salary=salarySETtemp_id=idENDFETCHNE*TFROMsalary_cursorINTOid,salaryENDCLOSEsalary_cursorDEALLOCATEsalary_cursorDECLAREstaff_cursorCURSORFORSELECT员工号,**FROM职员表OPENstaff_cursorFETCHNE*TFROMstaff_cursor. z.-INTOid,nameWHILEFETCH_STATUS=0BEGINifid=temp_idBEGINPRINT'实发工资最高的员工是'+nameBREAKENDFETCHNE*TFROMstaff_cursorINTOid,nameENDCLOSEstaff_cursorDEALLOCATEstaff_cursorGO================================================1010章习题21--事务回滚实验启动一个事务,向ZYGL数据库中插入一名新的员工信息,然后回滚该事务,并验证事务是否回滚。注意该事务涉及职员表和工资表这两个表的操作,并注意这两个表的操作顺序。USEZYGLGOBEGINTRANSACTIONINSERTINTO职员表VALUES('009','李靖','男','1976-9-11INSERTINTO工资表(员工号,基本工资,津贴,三金扣款)VALUES('009',1800,720,490.5)SELECT*FROM职员表SELECT*FROM工资表ROLLBACKGOSELECT*FROM职员表SELECT*FROM工资表GO2--事务模式实验--系统默认状态:set*act_abortoff,setimplicit_transactionsoff--【1】-----显式事务方式:usecjglcreatetable学生会(**nchar(4),性别nchar(1)check(性别in('男','女')),职务nchar(5))gobegintransactioninsert学生会(**,性别,职务)values('王宏','男','主席')insert学生会(**,性别,职务)values('*柳','女','副主席')insert学生会(**,性别,职务)values('梅里','女','组织部长'). z.-rollback--回滚或MITgoselect*from学生会droptable学生会--【2】-----------隐式事务方式:setimplicit_transactionson --启动隐性事务模式createtable学生会(**nchar(4),性别nchar(1)check(性别in('男','女')),职务nchar(5))goinsert学生会(**,性别,职务)values('王宏','男','主席')insert学生会(**,性别,职务)values('*柳','女','副主席')insert学生会(**,性别,职务)values('梅里','女','组织部长')rollback--回滚或MITgoselect*from学生会droptable学生会--【3】----------自动提交事务方式:setimplicit_transactionsoffcreatetable学生会(**nchar(4),性别nchar(1)check(性别in('男','女')),职务nchar(5))goinsert学生会(**,性别,职务
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 漯河食品职业学院《机械工程材料与成形技术》2023-2024学年第一学期期末试卷
- 2024年版:版权许可及发行外包合同2篇
- 2025签订房屋租赁合同要审查哪些要点
- 2024年标准个人汽车短期租赁协议范本版
- 单位人事管理制度范例合集
- 旅游挑战之旅服务合同
- 外墙修复工程安全协议
- 娱乐产业合同工管理方案
- 2024年标准化园林材料采购合同版B版
- 2024双方智能电网建设与运营合作承诺书3篇
- QB/T 8024-2024 电热采暖炉(正式版)
- 中国饮食文化智慧树知到期末考试答案2024年
- 音乐技能综合实训智慧树知到期末考试答案2024年
- MOOC 饲料毒物学-华中农业大学 中国大学慕课答案
- 第五单元《京腔昆韵》-欣赏 ☆姹紫嫣红 课件- 2023-2024学年人音版初中音乐八年级下册
- 中小学校园交通安全常识宣传
- 商业摄影智慧树知到期末考试答案2024年
- 国家粮食和物资储备局招聘考试试题及答案
- JTG F90-2015 公路工程施工安全技术规范
- 松果体区肿瘤护理
- 《施工现场安全防护标准化防高坠篇》测试附有答案
评论
0/150
提交评论