2023年数据库概论实验报告书_第1页
2023年数据库概论实验报告书_第2页
2023年数据库概论实验报告书_第3页
2023年数据库概论实验报告书_第4页
2023年数据库概论实验报告书_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

《数据库系统概论》实验报告书班级:网141姓名:郭杰学号:指导老师:周兵安徽工业大学计算机科学与技术学院实验一:数据定义语言[实验日期]2023年12月9日[实验目的]熟悉Oracle上机环境及Oracle客户端的配置;纯熟掌握和使用DDL语言,建立、修改和删除数据库表、主键、外键约束关系和索引。[实验内容]Oracle上机环境以及Oracle客户端的配置参见附录。1.SQL数据定义语句:例1-1:(建立数据库表)建立教学数据库的四个数据库表,其中Student表中不包含SSEX(C,2)字段,Sname字段为Sname(C,8)且可为空。(1)、CREATETABLES( SNOCHAR(5),ﻩSNAMEVARCHAR2(8), SDEPTCHAR(2)NOTNULL,ﻩSCLASSCHAR(2)NOTNULL, SAGENUMBER(2)CHECK(SAGEBETWEEN12AND60), CONSTRAINTSNO_pkPRIMARYKEY(SNO));(2)、CREATETABLEC(ﻩCNOCHAR(3),ﻩCNAMEVARCHAR2(16)NOTNULL,ﻩCTIMENUMBER(3),ﻩCONSTRAINTCNO_pkPRIMARYKEY(CNO));(3)、CREATETABLET( TNAMEVARCHAR(8)NOTNULL,ﻩTSEXCHAR(2)CHECK(TSexIN('男','女')),ﻩCNOCHAR(3),ﻩTDATEDATE,ﻩTDEPTCHAR(2), CONSTRAINTT_pkPRIMARYKEY(TNAME,CNO,TDEPT), CONSTRAINTCNO_fkFOREIGNKEY(CNO)REFERENCESC(CNO));(4)、CREATETABLESC( SNOCHAR(5), CNOCHAR(3), SCORENUMBER(5,2), CONSTRAINTSC_pkPRIMARYKEY(SNO,CNO), CONSTRAINTSNO_fkFOREIGNKEY(SNO)REFERENCESS(SNO),ﻩCONSTRAINTCNO2_fkFOREIGNKEY(CNO)REFERENCESC(CNO), CONSTRAINTCk1CHECK(SCORE>=0andSCORE<=100));结果截图:例1-2:(修改数据库表)在Student表中增长SEX(C,2)字段。 ALTERTABLESADDSEXCHAR(2)CHECK(SEXIN(‘男’,’女’));例1-3:(修改列名)将Student表中列名SEX修改为SSEX。 ALTERTABLESRENAMECOLUMNSEXTOSSEX;例1-4:(修改数据库表)将Student表中把Sname字段修改为Sname(C,10)且为非空。 ALTERTABLESMODIFY(SNAMECHAR(10)NOTNULL);例1-5:(建立索引)为Score表按课程号升序、分数降序建立索引,索引名为SC_GRADE。ﻩCREATEUNIQUEINDEXSC_GRADEONSC(CNOASC,SCOREDESC);例1-6:(删除索引)删除索引SC_GRADE。 DROPINDEXSC_GRADE;例1-7:(建立数据库表)建立数据库表S1(SNO,SNAME,SD,SA),其字段类型定义与Student表中的相应字段(SNO,SNAME,SDEPT,SAGE)的数据类型定义相同。 CREATETABLES1( SNOCHAR(5),ﻩSNAMECHAR(10),ﻩSDCHAR(2)NOTNULL,ﻩSANUMBER(2)CHECK(SABETWEEN12AND60),ﻩCONSTRAINTSNO1_pkPRIMARYKEY(SNO));例1-8:(修改数据库表)删除成绩表Score的参照完整性约束关系。ﻩALTERTABLESCDROPCONSTRAINTSC_pk; ALTERTABLESCDROPCONSTRAINTSNO_fk; ALTERTABLESCDROPCONSTRAINTCNO2_fk;例1-9:(修改数据库表)添加成绩表Score的参照完整性约束关系。ALTERTABLESCADDCONSTRAINTSC_pkPRIMARYKEY(SNO,CNO); ALTERTABLESCADDCONSTRAINTSNO_fkFOREIGNKEY(SNO)REFERENCESS(SNO); ALTERTABLESCADDCONSTRAINTCNO2_fkFOREIGNKEY(CNO)REFERENCESC(CNO);例1-10:(修改数据库表名)将数据库表S1改名为Student_Temp。 RENAMES1TOSTUDENT_TEMP;[实验规定]①熟悉Oracle上机环境,掌握Oracle客户端的配置;

②建立数据库表,修改数据库表结构,建立、删除索引;[实验方法]①按照附录中的操作环节进行客户端的配置;ﻫ②将实验需求用SQL语句表达;

③执行SQL语句;ﻫ④查看执行结果,假如结果不对的,进行修改,直到对的为止。[实验总结]①SQL语句以及执行结果;ﻫ②对重点实验结果进行分析;ﻫ③实验中的问题和提高;实验结果及截图备注在语句的后面,各个语句均可正常执行;在创建表时要注意的约束名不可反复,即唯一性条件例如:创SC时外键不可命名为CNO_fk;由于在创建T表时已经用过了CNO_fk,则要换一个约束名在创建表时表名不可反复使用;尚有,在打完一条语句时应当检查一遍,以免打错;例如:再添加外键时,把单词references打错了,显示缺少关键字需要删除表时,若有外键引用时发现删不掉,有两种方法解决:a:先将有外键的表删除,再删除要删除的表;b:删除表时使用CASCADE;就可以删除带有外键的表,其他表的约束性不变。ﻩ(4)收获与体会:实验二:数据操纵语言[实验日期]2023年12月7日[实验目的]在实验一的基础上,纯熟掌握和使用DML语言,对数据进行增长、修改和删除操作。[实验内容]2.SQL数据操纵语句:例2-1:(插入数据)按前面各表中的数据分别插入到教学数据库的四个数据库表中。ﻩS表: INSERTINTOSVALUES('96001','马小燕','CS','01','21','女');INSERTINTOSVALUES('96002','黎明','CS','01','18','男');INSERTINTOSVALUES('96003','刘东明','MA','01','18','男');INSERTINTOSVALUES('96004','赵志勇','IS','02','20','男');INSERTINTOSVALUES('97001','马蓉','MA','02','19','女');INSERTINTOSVALUES('97002','李成功','CS','01','20','男');INSERTINTOSVALUES('97003','黎明','IS','03','19','女');INSERTINTOSVALUES('97004','李丽','CS','02','19','女');INSERTINTOSVALUES('96005','司马志明','CS','02','18','男');INSERTINTOSVALUES('20231','赵薇','IS','02','19','女');ﻩC表: INSERTINTOCVALUES('001','数学分析','144');INSERTINTOCVALUES('002','普通物理','144');INSERTINTOCVALUES('003','微机原理','72');INSERTINTOCVALUES('004','数据结构','72');INSERTINTOCVALUES('005','操作系统','64');INSERTINTOCVALUES('006','数据库原理','64');INSERTINTOCVALUES('007','DB_Design','48');INSERTINTOCVALUES('008','程序设计','56'); T表:ﻩINSERTINTOTVALUES('王成刚','男','004','05-9月-1999','CS');INSERTINTOTVALUES('李正科','男','003','05-9月-1999','CS');INSERTINTOTVALUES('严敏','女','001','05-9月-1999','MA');INSERTINTOTVALUES('赵高','男','004','05-9月-1999','IS');INSERTINTOTVALUES('李正科','男','003','23-2月-2023','MA');INSERTINTOTVALUES('刘玉兰','女','006','23-2月-2023','CS');INSERTINTOTVALUES('王成刚','男','004','23-2月-2023','IS');INSERTINTOTVALUES('马悦','女','008','06-9月-2023','CS');INSERTINTOTVALUES('王成刚','男','007','05-9月-1999','CS'); SC表: INSERTINTOSCVALUES('96001','001','77.5');INSERTINTOSCVALUES('96001','003','89');INSERTINTOSCVALUES('96001','004','86');INSERTINTOSCVALUES('96001','005','82');INSERTINTOSCVALUES('96002','001','88');INSERTINTOSCVALUES('96002','003','92.5');INSERTINTOSCVALUES('96002','006','90');INSERTINTOSCVALUES('96005','004','92');INSERTINTOSCVALUES('96005','005','90');INSERTINTOSCVALUES('96005','006','89');INSERTINTOSCVALUES('96005','007','76');INSERTINTOSCVALUES('96003','001','69');INSERTINTOSCVALUES('97001','001','96');INSERTINTOSCVALUES('97001','008','95');INSERTINTOSCVALUES('96004','001','87');INSERTINTOSCVALUES('96003','003','91');INSERTINTOSCVALUES('97002','003','91');INSERTINTOSCVALUES('97002','004','');INSERTINTOSCVALUES('97002','006','92');INSERTINTOSCVALUES('97004','005','90');INSERTINTOSCVALUES('97004','006','85');INSERTINTOSCVALUES('97004','008','75');INSERTINTOSCVALUES('97003','001','59');INSERTINTOSCVALUES('97003','003','58');例2-2:(多行插入)将表Student中在计算机系(‘CS’)的学生数据插入到表Student_Temp中。(以上操作中,注意用COMMIT提交数据,将数据保存到数据库服务器) INSERTINTOSTUDENT_TEMP(SELECTSNO,SNAME,SDEPT,SAGEFROMSWHERESDEPT=’CS’);例2-3:(运用查询来实现表的定义与数据插入)求每一个学生的平均成绩,把结果存入数据库表Student_Gr中。ﻩCREATETABLESTUDENT_GR(SNOCHAR(5),SAVGNUMBER(5,2));ﻩINSERTINTOSTUDENT_GR(SELECTSNO,AVG(SCORE)FROMSCOREGROUPBYSNO);ﻩﻩ例2-4:(修改数据)将Student_Temp表中所有学生的年龄加2。 UPDATESTUDENT_TEMPSETSA=SA+2;例2-5:(修改数据)将Course表中‘程序设计’课时数修改成与‘数据结构’的课时数相同。ﻩUPDATECSETCTIME=72WHERECNAME=’程序设计’;ﻩ例2-6:(插入数据)向Score表中插入数据(‘98001’,‘001’,95),根据返回信息解释其因素。 INSERTINTOSCVALUES(‘98001’,’001’,’95’);ﻩ由于SCORE是参照STUDENT的SNO例2-7:(插入数据)向Score表中插入数据(‘97001’,‘010’,80),根据返回信息解释其因素。ﻩINSERTINTOSCVALUES(‘97001’,’010’,’80’);由于SCORE是参照COURSE的CNO例2-8:(删除数据)删除Student表中学号为‘96001’的学生信息,根据返回信息解释其因素。ﻩDELETEFROMSWHERESNO=96001; 由于其他表参照STUDENT的SNO,删除时要从子记录开始删除。例2-9:(删除数据)删除Course表中课程号为‘003’的课程信息,根据返回信息解释其因素。ﻩDELETEFROMCWHERECNO=003;由于其他表参照COURSE的CNO,删除时要从子记录开始删除。例2-10:(删除数据)删除学生表Student_Temp中学号以96打头的学生信息。(此操作后,注意用ROLLBACK回退也许更新的数据)DELETEFROMSTUDENT_TEMPWHERESNOLIKE‘96%’;ﻩ例2-11:(删除数据)删除数据库表Student_Temp中所有学生的数据。 DELETEFROMSTUDENT_TEMP; DELETEFROMSTUDENT_GR; 例2-12:(删除表)删除数据库表Student_Temp和Student_Gr。 DROPTABLESTUDENT_TEMP; DROPTABLESTUDENT_GR; [实验规定]对数据库表进行插入、修改和删除数据的操作。[实验方法]①按照附录中的操作环节进行客户端的配置;

②将实验需求用SQL语句表达;③执行SQL语句;ﻫ④查看执行结果,假如结果不对的,进行修改,直到对的为止。[实验总结]SQL语句以及执行结果;

②对重点实验结果进行分析;

③实验中的问题和提高;

④收获与体会。实验三:数据查询语言[实验日期]2023年12月7日[实验目的]体会SQL语言数据查询功能的丰富和复杂。[实验内容]3.SQL数据查询语句:例3-1:(选择表中的若干列)求全体学生的学号、姓名、性别和年龄。 SELECTSNO,SNAME,SSEX,SAGEFROMS;ﻩ例3-2:(不选择反复行)求选修了课程的学生学号。ﻩSELECTDISTINCTSNOFROMSCWHERECNOISNOTNULL;ﻩ例3-3:(选择表中的所有列)求全体学生的具体信息。ﻩSELECT*FROMS;例3-4:(使用表达式)求全体学生的学号、姓名和出生年份。 SELECTSNO,SNAME,2023-SAGEAS“YEAROFBIRTH”FROMS;ﻩ例3-5:(使用列的别名)求学生的学号和出生年份,显示时使用别名“学号”和“出生年份”。 SELECTSNOAS“学号”,2023-SAGEAS“出生年份”FROMS;ﻩ例3-6:(比较大小条件)求年龄大于19岁的学生的姓名和年龄。 SELECTSNAME,SAGEFROMSWHERESAGE>19;ﻩ例3-7:(比较大小条件)求计算机系或信息系年龄大于18岁的学生的姓名、系和年龄。 SELECTSNAME,SDEPT,SAGEFROMSWHERE(SDEPT=’CS’ORSDEPT=’IS’)ANDSAGE>18;ﻩ例3-8:(拟定范围条件)求年龄在19岁与22岁(含20岁和22岁)之间的学生的学号和年龄。ﻩSELECTSNO,SAGEFROMSWHERESAGE>19ANDSAGE<=22;ﻩﻩ例3-9:(拟定范围条件)求年龄不在19岁与22岁之间的学生的学号和年龄。 SELECTSNO,SAGEFROMSWHERESAGE<19ORSAGE>22;ﻩSELECTSNO,SAGEFROMSWHERESAGENOTBETWEEN19AND22;ﻩ ﻩ例3-10:(拟定集合条件)求在下列各系的学生信息:数学系、计算机系。 SELECT*FROMSWHERESDEPT=’MA’ORSDEPT=’CS’;ﻩselect

*

from

Student

where

sdept

in('MA','CS'); select*fromStudentwhereSDEPT='MA'unionselect*fromStudentwhereSEPT='CS';ﻩﻩ 例3-11:(拟定集合条件)求不是数学系、计算机系的学生信息。ﻩselect

*

from

S

where

SDEPT

not

in('MA','CS');ﻩﻩﻩ例3-12:(匹配查询)求姓名是以“李”打头的学生。 select

*

from

where

SNAME

like

'李%'; ﻩﻩ例3-13:(匹配查询)求姓名中具有“志”的学生。ﻩselect*fromSwhereSNAMElike'%志%'; 例3-14:(匹配查询)求姓名长度至少是三个汉字且倒数第三个汉字必须是“马”的学生。 select*fromSwhereSNAMElike'%马____'; 例3-15:(匹配查询)求选修课程001或003,成绩在80至90之间,学号为96xxx的学生的学号、课程号和成绩。 selectSNO,CNO,SCOREfromSCwhereCNOin('001','003')andSCOREbetween80and90andSNOlike'96%'; ﻩ例3-16:(匹配查询)求课程名中包含’_’字符的课程号、课程名和学时数。 select

CNO,CNAME,CTIME

from

where

CNAME

like

'%\_%'

escape

'\';ﻩ 例3-17:(涉及空值查询)求缺少学习成绩的学生的学号和课程号。ﻩselect

SNO,CNO

from

SC

where

SCORE

is

null;ﻩ 例3-18:(控制行的显示顺序)求选修003课程或004课程的学生的学号、课程号和分数,规定按课程号升序、分数降序的顺序显示结果。 select

SNO,CNO,SCORE

from

SC

where

CNO

in('003','004')

order

by

CNO

asc,SCORE

desc; 例3-19:(组函数)求学生总人数。 select

count(SNO)

from

S;ﻩ例3-20:(组函数)求选修了课程的学生人数。 selectcount(SNO)fromSwhereSNOin(selectdistinctSNOfromSCwhereSCOREisnotnull); 例3-21:(组函数)求计算机系学生的平均年龄。 select

avg(SAGE)

from

Swhere

SDEPT='CS';ﻩﻩ例3-22:(组函数)求选修了课程001的最高、最低与平均成绩。 selectmax(SCORE),min(SCORE),avg(SCORE)fromSCwhereCNO='001';ﻩﻩ例3-23:(分组查询)求各门课程的平均成绩与总成绩。ﻩselectavg(SCORE),sum(SCORE)fromSCgroupbyCNO; 例3-24:(分组查询)求各系、各班级的人数和平均年龄。ﻩselect

SDEPT,SCLASS,count(*),avg(SAGE)

from

SgroupbySCLASS,SDEPT;ﻩ 例3-25:(分组查询)输入以下查询语句并执行,观测出现的其结果并分析其因素。SELECTSNAME,SDEPT,COUNT(*)FROMSWHERESDEPT=’CS’GROUPBYSDEPT; ﻩ例3-26:(分组查询)分析以下语句为什么会出现错误。并给出对的的查询语句。SELECTSAGEFROMSGROUPBYSNO; ﻩ对分组后的语句查找满足条件的,用到HAVING例3-27:(分组查询)求学生人数局限性3人的系及其相应的学生数。ﻩselectSDEPT,count(SNO)fromSgroupbySDEPThavingcount(SNO)<3;ﻩﻩSELECT后所选择的列,要在后面分组中出现,除非SELECT后面用到集函数例3-28:(分组查询)求各系中除01班之外的各班的学生人数。 select

count(SNO)

from

Swhere

SCLASSnotin('01')

group

by

SCLASS,SDEPT;<>例3-29:(涉及空值的查询)分别观测各组函数、行的显示顺序以及分组查询与空值的关系。ﻩSELECTAVG(SCORE)FROMSC;SELECTAVG(SCORE)FROMSCWHERESCOREISNOTNULL;结果都是84.3478261,说明AVG函数将空值没有涉及在内SELECTMAX(SCORE)FROMSC;SELECTMAX(SCORE)FROMSCWHERESCOREISNOTNULL;结果都是96,说明MAX函数不受空值影响SELECTMIN(SCORE)FROMSC;SELECTMIN(SCORE)FROMSCWHERESCOREISNOTNULL;结果都是58,说明空值不是MIN函数的最小值SELECT

COUNT(SCORE)

FROM

SC;SELECTCOUNT(SCORE)FROMSCWHERESCOREISNOTNULL;结果是23,而总共有24个数据,因而COUNT函数对值为空的选项不予计算SELECT

FROM

SC

ORDER

BY

SCORE;结果中分数为NULL的选项排在最后一个位置,而默认的排列顺序是升序的,所以在分组中NULL是在后面的例3-30:(连接查询)求选修了课程001且成绩在70分以下或成绩在90分以上的学生的姓名、课程名称和成绩。ﻩselect

SNAME,CNAME,SCORE

from

S,C,SC

where

S.SNO=SC.SNO

and

C.CNO=SC.CNO

and

SC.CNO='001'

and

(SCORE<70

or

SCORE>90);例3-31:(连接查询与表的别名)求选修了课程的学生的学生姓名、课程号和成绩。ﻩselectSNAME,CNO,SCOREfromSS1,SCwhereS1.SNO=SC.SNO;24行例3-32:(自身连接查询)求年龄大于’李丽’的所有学生的姓名、系和年龄。 selectS1.SNAME,S1.SDEPT,S1.SAGEfromSS1,SS2whereS2.SNAME='李丽'

and

S1.SAGE>S2.SAGE; 例3-33:(外部连接查询)求选修了课程002或003的学生的学号、课程号、课程名和成绩,规定必须将002和003课程的相关信息显示出来。ﻩselectSNO,C.CNO,CNAME,ScorefromCleftouterjoinSCon(SC.CNO=C.CNO)whereC.CNOin('002','003'); 例3-34:(子查询)求与‘黎明’年龄相同的学生的姓名和系。 AND后面的ﻩselectSNAME,SDEPTfromSwhereSAGEinﻩ (selectSAGEfromSwhereSNAME='黎明')andSNAME<>'黎明';ﻩ例3-35:(子查询)求选修了课程名为’数据结构’的学生的学号和姓名。 selectSNO,SNAMEfromSwhereSNOin(selectSNOfromSCwhereCNOin(selectCNOfromCwhereCNAME='数据结构'));例3-36:(子查询ANY)求比数学系中某一学生年龄大的学生的姓名和系。ﻩselectSNAME,SDEPTfromSwhereSAGE>any(selectSAGEfromSwhereSDEPT='MA'); 例3-37:(子查询ALL)求比数学系中全体学生年龄大的学生的姓名和系。ﻩselectSNAME,SDEPTfromSwhereSAGE>all(selectSAGEfromSwhereSDEPT='MA'); 例3-38:(子查询EXISTS)求选修了课程004的学生的姓名和系。ﻩselect

SNAME,SDEPT

from

S

where

exists

(select

from

SC

where

SC.SNO=S.SNO

and

CNO='004');ﻩ例3-39:(返回多列的子查询)求与‘黎明’同系且同龄的学生的姓名和系。 selectS1.SNAME,S1.SDEPTfromSS1whereexists(select*fromSS2whereS2.SNAME='黎明'andS1.SDEPT=S2.SDEPTandS1.SAGE=S2.SAGE)andSNAME<>'黎明'; 例3-40:(多个子查询)求与‘‘黎明’同系,且年龄大于‘李丽’的学生的信息。ﻩselect*fromSwhereSDEPTin(selectSDEPTfromSwhereSNAME='黎明')andSAGE>(selectSAGEfromSwhereSNAME='李丽');例3-41:(子查询中使用表连接)求数学系中年龄相同的学生的姓名和年龄。 selectSNAME,SAGEfromSwhereSNOin(selectS1.SNOfromSS1,SS2whereS1.SDEPT='MA'andS1.SAGE=S2.SAGE);或select

distinct

S1.SNAME,S1.SAGE

from

S1

,S

S2

where

S1.SDEPT

='MA'

and

S1.SAGE=S2.SAGE; ﻩ例3-42:(连接或嵌套查询)检索至少选修王成刚老师所授课程中一门课程的女学生姓名。 selectSNAMEfromSwhereSSEX='女'andSNOin(selectSNOfromSCwhereCNOin(selectCNOfromTwhereTNAME='王成刚')); 例3-43:(嵌套与分组查询)检索选修某课程的学生人数多于3人的教师姓名。 selectdistinctTNAMEfromTwhereCNOin(selectCNOfromSCgroupbyCNOhavingcount(SNO)>3); 例3-44:(集合查询)列出所有教师和同学的姓名和性别。 selectSNAME,SSEXfromSunionselectTNAME,TSEXfromT;ﻩ例3-45:(相关子查询)求未选修课程004的学生的姓名。 select

SNAME

from

S

where

SNO

not

in(select

SNO

from

SC

where

CNO='004'); 例3-46:(相关子查询)求选修了所有课程的学生的姓名。 select

SNAME

from

S

where

not

exists(select

*

from

C

where

not

exists

(select

*

from

SC

where

SNO=S.SNO

and

CNO=C.CNO)); 未有学生选了所有课程。例3-47:(相关子查询)求至少选修了学生‘96002’所选修的所有课程的学生的学号。 selectSNOfromSwherenotexists(select*fromSCSc1whereSc1.SNO='96002'andnotexists(select*fromSCSc2whereSc2.SNO=S.SNOandSc1.CNO=Sc2.CNO));ﻩ例3-48:(相关子查询)求成绩比所选修课程平均成绩高的学生的学号、课程号、和成绩。 selectSc1.SNO,Sc1.CNO,Sc1.SCOREfromSCSc1whereSCORE>(selectavg(SCORE)fromSCSc2whereSc1.SNO=Sc2.SNO);ﻩ例3-49:(相关子查询)查询被一个以上的学生选修的课程号。 selectCNOfromCwhereCNOin(selectCNOfromSCgroupbyCNOhavingcount(SNO)>1);例3-50:(相关子查询)查询所有未选课程的学生姓名和所在系。selectSNAME,SDEPTfromSwhereSNOnotin(selectdistinctSNOfromSC);[实验规定]对数据库表进行各种查询操作。[实验方法]①将实验需求用SQL语句表达;

②执行SQL语句;ﻫ③查看执行结果,假如结果不对的,进行修改,直到对的为止。[实验总结]SQL语句以及执行结果;ﻫ②对重点实验结果进行分析;

③实验中的问题和提高;

④收获与体会实验四:视图、授权控制与事务解决[实验日期]2023年12月7日[实验目的]通过实验进一步理解视图的建立和更新、数据库的权限管理和事务解决功能。[实验内容]4.SQL视图的定义与操纵:例4-1:(建立视图)建立计算机系的学生的视图STUDENT_CS。ﻩcreateviewSTUDENT_CSasselect*fromSwhereSDEPT='CS';例4-2:(建立视图)建立由学号和平均成绩两个字段的视图STUDENT_GR。 create

view

STUDENT_GR(SNO,AVERAGE)

as

select

SNO,avg(SCORE)

from

SC

group

by

SNO;例4-3:(视图查询)运用视图STUDENT_CS,求年龄大于19岁的学生的所有信息。ﻩselect*fromSTUDENT_CSwhereSAGE>19;例4-4:(视图查询)运用视图STUDENT_GR,求平均成绩为88分以上的学生的学号和平均成绩。ﻩselect

from

STUDENT_GR

where

AVERAGE>88;例4-5:(视图更新)运用视图STUDENT_CS,增长学生(‘96006’,‘张然’,‘CS’,‘02’,‘男’,19)。 insert

into

STUDENT_CS

values('96006','张然','CS','02',19,'男')

;例4-6:(视图更新)运用视图STUDENT_CS,将学生年龄增长1岁。观测其运营结果并分析因素。 updateSTUDENT_CSsetSAGE=SAGE+1;例4-7:(视图更新)运用视图STUDENT_GR,将平均成绩增长2分。观测其运营结果并分析因素。 update

STUDENT_GR

set

AVERAGE=AVERAGE+2;例4-8:(视图更新)删除视图STUDENT_CS中学号为‘96006’的学生的所有数据。ﻩdeletefromSTUDENT_CSwhereSNO='96006';ﻩ例4-9:(视图更新)删除视图STUDENT_GR的所有数据。 delete

from

STUDENT_GR;

ﻩ例4-10:(删除视图)删除视图STUDENT_CS和STUDENT_GR。ﻩdropviewSTUDENT_CS; dropviewSTUDENT_GR; 5.SQL数据控制语句:例5-1:(授权)给左右邻近同学(用户)授予在表Student上的SELECT权限,并使这两个用户具有给其他用户授予相同权限的权限。ﻩgrantselectonStoUwithgrantoption; 例5-2:(授权)给邻近同学(用户)授予Teach表上的所有权限。 grantallprivilegesonTtoU; 例5-3:(授权)给所有用户授予Score表上的SELECT权限。grantselectonSCtopublic;例5-4:(授权验证)观测左右邻近同学查询你所授权的表中的内容。ﻩ例5-5:(收回授权)收回上面例子中的所有授予的权限。ﻩrevokeselectonStudentfromU;revokeallprivilegesonTeachfromU;revokeselectonScorefrompublic;6.SQL事务解决:例6-1:(事务回退)将课程名称表中的‘程序设计’课程学时数修改为80、‘微机原理’课程学时数修改为70学时,查询所有课程的总学时数后,取消所有修改(ROLLBACK)。再次查询所有课程的总学时数。注意比较分析两次查询的结果。 updateCsetCTIME=80whereCNAME='程序设计'; updateCsetCTIME=70whereCNAME='微机原理'; select*fromC;ﻩ rollback;ﻩselect*fromC; 例6-2:(事务提交)将课程名称表中的‘程序设计’课程学时数修改为80、‘微机原理’课程学时数修改为70学时,查询所有课程的总学时数后,确认所有修改(COMMIT)。再次查询所有课程的总学时数。注意比较分析两次查询的结果。updateCsetCTIME=80whereCNAME='程序设计';updateCsetCTIME=70whereCNAME='微机原理';select

*

from

C;[实验规定]①建立视图,视图查询,视图更新;

②给某一或所有用户授权和收回授权;ﻫ③事务回退,事务提交。[实验方法]①将实验需求用SQL语句表达;ﻫ②执行SQL语句;ﻫ③查看执行结果,假如结果不对的,进行修改,直到对的为止。[实验总结]①SQL语句以及执行结果;ﻫ②对重点实验结果进行分析;

③实验中的问题和提高;

④收获与体会。实验五:Oracle存储过程与触发器[实验目的]通过实验进一步理解和掌握Oracle数据库的存储过程和触发器。[实验内容]4.存储过程与触发器:例7-1:(存储过程)创建一个显示学生总人数的存储过程。方法一:(常用)CREATEORREPLACEPROCEDURESTU_COUNTASANUMBER;BEGINSELECTCOUNT(*)INTOAFROMSTUDENT;DBMS_OUTPUT.PUT_LINE('学生总人数为'||A);END;方法二:例7-2:(存储过程)创建显示学生信息的存储过程STUDENT_LIST,并引用STU_COUNT存储过程。CREATEORREPLACEPROCEDURESTUDENT_LISTASANUMBER;CURSORSTUDENT_CURSORISSELECT*FROMSTUDENT;BEGINFORSTUDENT_RECORDINSTUDENT_CURSORLOOPDBMS_OUTPUT.PUT_LINE(STUDENT_RECORD.SNO||''||STUDENT_RECORD.SNAME||''||STUDENT_RECORD.SDEPT||''||STUDENT_RECORD.SCLASS||''||STUDENT_RECORD.SSEX||''||STUDENT_RECORD.SAGE);ENDLOOP;STU_COUNT();END;/例7-3:(存储过程)创建一个显示学生平均成绩的存储过程。CREATEORREPLACEPROCEDURESTU_AVG(PINSCORE.SNO%TYPE)ASANUMBER(5,2);BEGINSELECTAVG(SCORE)INTOAFROMSCOREWHERESNO=PGROUPBYSNO;DBMS_OUTPUT.PUT_LINE('学号为'||P||'的学生的平均成绩为:'||A);END;/例7-4:(存储过程)创建显示所有学生平均成绩的存储过程。CREATEORREPLACEPROCEDURESTUDENT_SAVGASSAVGNUMBER(5,2);SSNOCHAR(5);CURSORSCORE_CURSORISSELECTSNO,AVG(SCORE)FROMSCOREGROUPBYSNO;BEGINOPENSCORE_CURSOR;LOOPFETCHSCORE_CURSORINTOSSNO,SAVG;EXITWHENSCORE_CURSOR%NOTFOUND;DBMS_OUTPUT.PUT_LINE(SSNO||''||SAVG);ENDLOOP;CLOSESCORE_CURSOR;END;/例7-5:(修改数据库表)在Student表中增长SAVG(N,6,2)字段。ALTERTABLESTUDENTADDSAVGNUMBER(6,2);例7-6:(存储过程)创建存储过程,计算每个学生的平均成绩保存到学生表SAVG字段中。CREATEORREPLACEPROCEDURESTUDENT_INSERTSAVGASSSAVGNUMBER(5,2);SSNOCHAR(5);CURSORSCORE_CURSORISSELECTSNO,AVG(SCORE)FROMSCOREGROUPBYSNO;BEGINOPENSCORE_CURSOR;LOOPFETCHSCORE_CURSORINTOSSNO,SSAVG;UPDATESTUDENTSETSAVG=SSAVGWHERESNO=SSNO;EXITWHENSCORE_CURSOR%NOTFOUND;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论