华工数据库实验题Word格式.docx

上传人:b****7 文档编号:21897689 上传时间:2023-02-01 格式:DOCX 页数:12 大小:20.73KB
下载 相关 举报
华工数据库实验题Word格式.docx_第1页
第1页 / 共12页
华工数据库实验题Word格式.docx_第2页
第2页 / 共12页
华工数据库实验题Word格式.docx_第3页
第3页 / 共12页
华工数据库实验题Word格式.docx_第4页
第4页 / 共12页
华工数据库实验题Word格式.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

华工数据库实验题Word格式.docx

《华工数据库实验题Word格式.docx》由会员分享,可在线阅读,更多相关《华工数据库实验题Word格式.docx(12页珍藏版)》请在冰豆网上搜索。

华工数据库实验题Word格式.docx

)ON[PRIMARY]

GO

ALTERTABLE[dbo].[SC]WITHCHECKADDCONSTRAINT[FK_SC_Courses]FOREIGNKEY([CNO])

REFERENCES[dbo].[Courses]([CNO])

ALTERTABLE[dbo].[SC]CHECKCONSTRAINT[FK_SC_Courses]

ALTERTABLE[dbo].[SC]WITHCHECKADDCONSTRAINT[FK_SC_Students]FOREIGNKEY([SNO])

REFERENCES[dbo].[Students]([SNO])

ALTERTABLE[dbo].[SC]CHECKCONSTRAINT[FK_SC_Students]

2.完成如下的查询要求及更新的要求。

(1)查询身高大于1.80m的男生的学号和姓名;

selectSNO,SNAMEfromStudentswhereHEIGHT>

1.8

(2)查询计算机系秋季所开课程的课程号和学分数;

selectCNO,CREDITfromCourseswhereSEMESTER='

秋季'

(3)查询选修计算机系秋季所开课程的男生的姓名、课程号、学分数、成绩;

selects.SNAME,SC.CNO,c.CREDIT,SC.GRADEfromstudentss

innerjoinSConsc.SNO=s.SNO

innerjoinCoursesconsc.CNO=c.CNO

wheres.DEPARTMENT='

计算机系'

ands.SEX='

男'

andc.SEMESTER='

(4)查询至少选修一门电机系课程的女生的姓名(假设电机系课程的课程号以EE开头);

selectdistincts.snamefromStudentss,scwheres.sno=sc.snoands.sex='

女'

andolike'

EE%'

(5)查询每位学生已选修课程的门数和总平均成绩;

selectcount(c.CNO)as课程门数,avg(SC.GRADE)as总平均成绩fromstudentss

groupbys.SNO

(6)查询每门课程选课的学生人数,最高成绩,最低成绩和平均成绩;

selectcname,count(cno),max(grade),min(grade),avg(grade)

fromstudentsnaturaljoinscnaturaljoincourses

groupbychane;

(7)查询所有课程的成绩都在80分以上的学生的姓名、学号、且按学号升序排列;

selectsname,snofromstudentsnaturaljoin(selectsno.min(grade)asminifromscgroupbysno)wheremini>

80orderby(sno);

(8)查询缺成绩的学生的姓名,缺成绩的课程号及其学分数;

selectsname,o,credit

fromstudents,courses,sc

wherestudents.sno=sc.snoando=oandgradeisnull;

(9)查询有一门以上(含一门)三个学分以上课程的成绩低于70分的学生的姓名;

selectsnamefromstudents,courses,sc

wherestudents.sno=sc.snoando=sc.choandcredit>

=3andgrade<

70;

(10)查询1984年~1986年出生的学生的姓名,总平均成绩及已修学分数。

selectsmane,avg(grade),sun(credit)

wherebdatebetween'

1984-00-00'

and'

1987-00-00'

groupbysname;

(11)在STUDENT和SC关系中,删去SNO以’01’开关的所有记录。

deletescwhereSNOlike'

%01%'

deleteStudentswhereSNOlike'

(12)在STUDENT关系中增加以下记录:

<

0409101何平  女  1987-03-02  1.62>

0408130向阳  男  1986-12-11  1.75>

insertintostudentsvalues('

0409101'

'

何平'

1987-03-02'

1.62,'

'

0408130'

向阳'

1986-12-11'

1.75,'

(13)将课程CS-221的学分数增为3,讲课时数增为60

updatecoursessetcredit=3wherecno='

GS-221'

updatecoursessetcredit=60wherecno='

3.补充题:

(1)统计各系的男生和女生的人数。

selectdepartment,

sum(casewgensex='

then1else0end),

count(sno)fromstudentsgroupbydepartmentorderbydepartment;

(2)列出学习过‘编译原理’,‘数据库’或‘体系结构’课程,且这些课程的成绩之一在90分以上的学生的名字。

selectsname

wherecname='

编译原理'

orcname='

数据库'

体系结构'

andgrade>

90;

(3)列出未修选‘电子技术’课程,但选修了‘数字电路’或‘数字逻辑’课程的学生数。

selectcount(distincisc.sno)fromcourses,sc.snonotin

(selectsc.snofromo=oandcname='

电子技术'

andoin(selectcnofromcourseswherecname='

数字逻辑'

数字电路'

(4)按课程排序列出所有学生的成绩,尚无学生选修的课程,也需要列出,相关的学生成绩用NULL表示。

selectdistincto,ame,sno,gradefromcoursesleftjoinscon(o-o)

groupbyo,ame,sno,grade

orderbyo,ame,sno,grade;

(5)列出平均成绩最高的学生名字和成绩。

(SELECT句中不得使用TOPn子句)

selectsname,r

from(selectsname,avg(grade)asfromstudents,scwherestudents.sno=sc.snogroupbysname,students.snoorderbyrdesc)

whererownum=1;

4.选做题:

对每门课增加“先修课程”的属性,用来表示某一门课程的先修课程,每门课程应可记录多于一门的先修课程。

要求:

1)修改表结构的定义,应尽量避免数据冗余,建立必要的主键,外键。

2)设计并插入必要的测试数据,完成以下查询:

列出有资格选修数据库课程的所有学生。

(该学生已经选修过数据库课程的所有先修课,并达到合格成绩。

注意:

须设计每个查询的测试数据,并在查询之前用INSERT语句插入表中。

 

实验二:

数据库的安全和完整性约束

实验要求:

1.采用实验一的建库脚本和数据插入脚本创建Student数据库,并完成以下操作:

1)新增表Credits(SNO,SumCredit,NoPass),表示每学生已通过选修课程的合计学分数,以及不及格的课程数。

createtableCredits

(SNOvarchar(100),

SumCreditint,

NoPassint)

2)创建视图Student_Grade(Sname,Cname,Grade),表示学生选修课程及成绩的详细信息。

createviewStudent_Grade

as

selects.SNAME,c.CNAME,SC.GRADEfromstudentss

2.在数据库中创建以下触发器:

1)Upd_Credit

当在SC表中插入一条选课成绩,自动触发Upd_Credit,完成在Credits表中修改该学生的合计学分数和不及格的课程数。

createtriggerUpd_CreditonSCforinsert

declare@SNOvarchar(100),@CNOvarchar(100),@GRADEint,@NoPassint,@CREDITint

select@SNO=SNO,@CNO=CNO,@GRADE=GRADE,@NoPass=(casewhenGRADE<

60then1else0end)frominserted

select@CREDIT=CREDITfromCourseswhereCNO=@CNO

updateCredits

setSumCredit=SumCredit+@CREDIT,

NoPass=NoPass+@NoPass

whereSNO=@SNO

2)Upd_StuView (Insteadof触发器)

当对视图Student_Grade作插入数据项操作时,自动触发Upd_StuView,完成对SC表的插入操作。

如:

当执行InsertintoStudent_Gradevalues(‘王刚’,’数据库’,54)

则触发器完成另一插入操作:

InsertintoSCvalues(‘980201’,’CS-110’,54)

另外,需要检查当前插入的学生和课程是否已在Students,和Courses表中存在,如不存在,不执行任何操作,并提示用户错误信息。

createtriggerUpd_StuViewonStudent_Gradeforinsert

as

declare@SNAMEvarchar(100),@CNAMEvarchar(100),@GRADEint

select@SNAME=SNAME,@CNAME=CNAME,@GRADE=GRADEfrominserted

IF(EXISTS(SELECT*FROMStudentsWHERESNAME=@SNAME)AND

EXISTS(SELECT*FROMCoursesWHERECNAME=@CNAME))

BEGIN

InsertintoSC

select(SELECTTOP1SNOFROMStudentsWHERESNAME=@SNAME),

(SELECTTOP1CNOFROMCoursesWHERECNAME=@CNAME),

@GRADE

END

3)PK_SC,FK_SC_SNO,FK_SC_CNO)  (选做)

首先删除SC中所有主键和外键定义,用触发器实现表SC上的主键(SNO,CNO)和外键SNO,CNO的约束定义。

3.为Student数据库设计安全机制。

在该数据库系统中,有三类用户:

1)学生,权限包括:

查询所有的课程信息,根据学号和课程号来查询成绩。

但不允许修改任何数据。

(必做)

只能查询自己的成绩,不能查询别人的成绩。

(选做)

2)老师:

权限包括:

查询有关学生及成绩的所有信息,有关课程的所有信息,但不允许修改任何数据。

CREATE 

TRIGGER 

secure_student 

BEFORE 

UPDATE 

OR 

DELETE 

ON 

database

BEGIN 

IF((selectuserfromdual)='

老师'

) 

THEN 

RAISE_APPLICATION_ERROR(-20506, 

您没有权限对学生表进行修改.'

3)教务员:

查询和修改任何有关学生和课程的信息,但不允许查询和修改数据库中其它任何表,视图等数据库对象。

databaseEXCEPTStudents

教务员'

您没有权限进行修改.'

安全控制必须仅由数据库一端来实现,不考虑由应用程序来控制。

为此,需要创建三个用户,登录时密码验证;

分别授予各类权限,并测试权限的控制是否有效。

实验三:

SQL编程

1.采用实验一的建库脚本和数据插入脚本创建Student数据库。

2.在数据库中创建以下存储过程:

1)Add_Student(SNO,SNAME,SEX,BIRTHDAY,HEIGHT,DEPT)

根据输入参数,插入一条学生记录。

createprocedureAdd_Student

@SNOvarchar(100),

@SNAMEvarchar(100),

@SEXvarchar(10),

@BIRTHDAYdatetime,

@HEIGHTdecimal,

@DEPTvarchar(100)

insertintoStudents

values(

@SNO,

SNO,

@SNAME,

@SEX,

@BIRTHDAY,

@HEIGHT,

@DEPT

2)Upd_Grade(SNO,CNO,GRADE)

根据输入参数,修改某学生选课的成绩。

createprocedureUpd_Grade

@CNOvarchar(100),

@GRADEINT

UPDATESC

setSNO=@SNO,

CNO=@CNO,

GRADE=@GRADE

whereSNO=@SNOandCNO=@CNO

3)Disp_Student(SNO,SUM_CREDIToutput,AVG_GRADEoutput)

根据SNO参数显示该学生的有关信息,包括:

a)学号,姓名,性别,年龄,身高,系别,所有选修的课程及成绩;

b)显示输出参数SUM_CREDIT(表示选修课程的总学分)及AVG_GRADE(表示3学分以上的课程的平均成绩)。

@SUM_CREDITINToutput,

@AVG_GRADEintoutput

select*fromStudentss

wheres.SNO=@SNO

select@SUM_CREDIT=SumCreditfromCredits

whereSNO=@SNO

select@AVG_GRADE=avg(SC.GRADE)fromStudentss

wheres.SNO=@SNOandSC.GRADE>

3

4)CAL_GPA(SNO,GPAoutput)

根据SNO参数,输出并显示该学生的GPA值。

计算方法如下:

GRADE(G)GRADEPOINT(GP)

G>

=854

85>

=753

75>

=602

60>

G1

GPA=(∑GP*CREDIT)/∑CREDIT)

createprocedureCAL_GPA

@GPAdecimaloutput

declare@SUM_CREDITint,@AVG_GRADEint,@All_CREDITint

select@AVG_GRADE=avg(casewhenSC.GRADE>

=85then4when85>

SC.GRADEandSC.GRADE>

=75then3when75>

=60then2when60>

SC.GRADEthen1end)fromStudentss

select@GPA=(@AVG_GRADE*@SUM_CREDIT)/@All_CREDIT

3.选做题:

使用其它程序设计语言编程,连接数据库并提交SQL语句,显示查询结果。

要求:

实现上题中的第3)小题要求,设计一个图形界面来输入查询的参数SNO,及显示查询的结果。

(如采用VC++,VB等)

实验四:

事务的管理(选作)

1.采用实验一的建库脚本和数据插入脚本创建Student数据库。

2.测试事务隔离级别,要求:

分别设置不同的隔离级别,包括:

SETTRANSACTIONISOLATIONLEVELSERIALIZABLE;

SETTRANSACTIONISOLATIONLEVELREADCOMMITTED;

SETTRANSACTIONISOLATIONLEVELREADONLY;

两个并发事务交错执行的程序,能分别显示每种隔离级别下,是否出现丢失更新,脏读,读值不可复现以及幻象四种情况。

3.备份与恢复

Ø

备份数据库

BACKUPDATABASEtest

TOdisk='

c:

\test'

删除sc表

DROPTABLESC

恢复到删除之前

答:

USEmaster

RESTOREDATABASEtest_wt

FROMdisk='

\test_wt'

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 理学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1