




已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据库系统概论实验报告书专业班级网134学 号119074415姓 名 云飞指导教师 周兵 安徽工业大学计算机科学与技术学院实验一:数据定义语言 实验日期 年 月 日 实验目的 熟悉Oracle上机环境及Oracle客户端的配置;熟练掌握和使用DDL语言,建立、修改和删除数据库表、主键、外键约束关系和索引。 实验内容 Oracle上机环境以及Oracle客户端的配置参见附录。1 SQL数据定义语句: 例1-1: (建立数据库表) 建立教学数据库的四个数据库表,其中Student表中不包含SSEX(C,2) 字段,Sname 字段为Sname(C,8)且可为空。CREATE TABLE Student(SNO CHAR(5),SNAME CHAR(10) NULL,SDEPT CHAR(2),SCLASS CHAR(2),SAGE NUMBER(2),CONSTRAINT SON_PK PRIMARY KEY(SNO);CREATE TABLE Course(CNO CHAR(3),CNAME VARCHAR2(16),CTIME NUMBER(3),CONSTRAINT CNO_PK PRIMARY KEY(CNO);CREATE TABLE Teach(TNAME CHAR(8),TSEX CHAR(2),CNO CHAR(3),TDATE DATE,TDEPT CHAR(2),CONSTRAINT TT_PK PRIMARY KEY(TNAME,CNO,TDEPT),CONSTRAINT CNO_FK FOREIGN KEY(CNO) REFERENCES Course(CNO);CREATE TABLE Score(SNO CHAR(5),CNO CHAR(3),SCORE NUMBER(5,2),CONSTRAINT SC_PK PRIMARY KEY(SNO,CNO),CONSTRAINT CNO1_FK FOREIGN KEY(CNO) REFERENCES Course(CNO),CONSTRAINT SNO_FK FOREIGN KEY(SNO) REFERENCES Student(SNO);(Score表中定义外键的名称不能为CNO,被Teach表中约束条件占用) 例1-2: (修改数据库表) 在Student表中增加SEX(C,2) 字段。ALTER TABLE Student ADD SEX CHAR(2); 例1-3: (修改列名) 将Student表中列名SEX修改为SSEX。ALTER TABLE Student RENAME COLUMN SEX TO SSEX; 例1-4: (修改数据库表) 将Student表中把Sname 字段修改为Sname(C,10)且为非空。ALTER TABLE Student MODIFY SNAME CHAR(10) NOT NULL; 例1-5: (建立索引) 为Score表按课程号升序、分数降序建立索引,索引名为SC_GRADE。CREATE UNIQUE INDEX SC_GRADE ON Score(CNO ASC,SCORE DESC); 例1-6: (删除索引) 删除索引SC_GRADE。DROP INDEX SC_GRADE; 例1-7: (建立数据库表) 建立数据库表S1(SNO,SNAME,SD,SA),其字段类型定义与Student表中的相应字段(SNO,SNAME,SDEPT,SAGE)的数据类型定义相同。CREATE TABLE S1(SNO CHAR(5) PRIMARY KEY NOT NULL,SNAME CHAR(10),SD CHAR(2),SA NUMBER(2); create table S1 as(select SNO,SNAME,SDEPT as SD,SAGE as SA from Student where 1=2); 例1-8: (修改数据库表) 删除成绩表Score的参照完整性约束关系。ALTER TABLE Score DROP CONSTARINT SNO_FK;ALTER TABLE Score DROP CONSTARINT CNO1_FK; 例1-9: (修改数据库表) 添加成绩表Score的参照完整性约束关系。ALTER TABLE SCORE ADD CONSTRAINT CNO1_FK FOREIGN KEY(CNO) REFERENCES Course(CNO);ALTER TABLE SCORE ADD CONSTRAINT SNO_FK FOREIGN KEY(SNO) REFERENCES Student(SNO); 例1-10: (修改数据库表名) 将数据库表S1改名为Student_Temp。RENAME S1 TO Student_Temp; 实验要求 熟悉Oracle上机环境,掌握Oracle客户端的配置; 建立数据库表,修改数据库表结构,建立、删除索引; 实验方法 按照附录中的操作步骤进行客户端的配置; 将实验需求用SQL语句表示; 执行SQL语句; 查看执行结果,如果结果不正确,进行修改,直到正确为止。 实验总结 SQL语句以及执行结果; 对重点实验结果进行分析; 实验中的问题和提高; 收获与体会;实验心得:从这个实验中我学会了表的建立,内部一些格式的修改,在开始的时候我认为十分麻烦,但是随着我接触的多了,我感到有些代码都是相似的,找到相关的关联,就能够事半功倍。还有就是我发现许多表之间存在着联系,所以我要抓住相互的联系,才能更好的发挥数据语言的作用。 实验二:数据操纵语言 实验日期 年 月 日 实验目的 在实验一的基础上,熟练掌握和使用DML语言,对数据进行增加、修改和删除操作。 实验内容 2 SQL数据操纵语句: 例2-1:(插入数据) 按前面各表中的数据分别插入到教学数据库的四个数据库表中。 例2-2:(多行插入) 将表Student中在计算机系(CS)的学生数据插入到表Student_Temp中。INSERT INTO Student_Temp(SNO,SNAME,SD,SA)SELECT SNO,SNAME,SDEPT,SAGE FROM STUDENT WHERE SDEPT=CS;(以上操作中,注意用COMMIT提交数据,将数据保存到数据库服务器) 例2-3:(利用查询来实现表的定义与数据插入) 求每一个学生的平均成绩,把结果存入数据库表Student_Gr中。CREATE TABLE Student_Gr(SNO CHAR(10),SAVG NUMBER(5,2);INSERT INTO Student_Gr(SNO,SAVG)SELECT SNO,AVG(Score)FROM ScoreGROUP BY SNO;(create table Student_Gr as(select SNO,AVG(SCORE) from Score group by SNO);) 例2-4: (修改数据) 将Student_Temp表中所有学生的年龄加2。UPDATE Student_Temp SET SA=SA+2; 例2-5: (修改数据) 将Course表中程序设计课时数修改成与数据结构的课时数相同。UPDATE Course SET CTIME=(SELECT CTIME FROM Course WHERE CNO=004) WHERE CNO=008; 例2-6: (插入数据) 向Score表中插入数据(98001, 001, 95),根据返回信息解释其原因。INSERT INTO SCORE VALUES(98001,001,95); 插入的数据 如果某个字段是外键 那么该值要么为空 要么在主键表中 有对应的主键值,否则就不满足参照完整性约,Score表中的SNO字段是根据Student中的SNO建立的,然而Student中的SNO中没有98001。 例2-7: (插入数据) 向Score表中插入数据(97001, 010, 80),根据返回信息解释其原因。INSERT INTO SCORE VALUES(97001,010,85);因为Score表中的CNO字段是根据Course中的CNO建立的,Course表中并没有课程号是010的。例2-8: (删除数据) 删除Student表中学号为96001的学生信息,根据返回信息解释其原因。DELETE FROM Student WHERE SNO=96001; 因为Student表中学号已经被别的表作为外键,不可以被删除,违反完整约束条件例2-9: (删除数据) 删除Course表中课程号为003 的课程信息,根据返回信息解释其原因。DELETE FROM COURSE WHERE CNO=003; 因为Course表中课程号已经被别的表作为外键,不可以被删除,违反完整约束条件。 例2-10: (删除数据) 删除学生表Student_Temp中学号以96打头的学生信息。DELETE FROM Student_Temp WHERE SNO LIKE 96%;(此操作后,注意用ROLLBACK回退可能更新的数据) 例2-11: (删除数据) 删除数据库表Student_Temp中所有学生的数据。 DELETE FROM Student_Temp WHERE 2!=0;(此处的条件语句为真即可,例如2=2) 例2-12:(删除表) 删除数据库表Student_Temp和Student_Gr。DROP TABLE Student_Temp;DROP TABLE Student_Gr; 实验要求 对数据库表进行插入、修改和删除数据的操作。 实验方法 按照附录中的操作步骤进行客户端的配置; 将实验需求用SQL语句表示; 执行SQL语句; 查看执行结果,如果结果不正确,进行修改,直到正确为止。 实验总结 SQL语句以及执行结果; 对重点实验结果进行分析; 实验中的问题和提高; 收获与体会。实验心得:感觉实验2是对实验1的补充,实验2需要掌握的是对内部数据的修改和删除一些不必要的表。通过实验,我发现有些东西不是想删除就可以删除的,他们存在着完整约束条件,所以不能够实现那个操作。在发生了这个问题时,需要的是认真思索,找到问题的根源,这样既能够解决问题,也能都理解问题的本质原因,能够更好地帮助我的学习,非常不错! 实验三:数据查询语言 实验日期 年 月 日 实验目的 体会SQL语言数据查询功能的丰富和复杂。 实验内容 3 SQL数据查询语句: 例3-1: (选择表中的若干列) 求全体学生的学号、姓名、性别和年龄。 SELECT SNO,SNAME,SSEX,SAGE FROM Student; 例3-2: (不选择重复行) 求选修了课程的学生学号。 SELECT DISTINCT SNO FROM Score WHERE CNO IS NOT NULL; 例3-3: (选择表中的所有列) 求全体学生的详细信息。SELECT * FROM Student; 例3-4: (使用表达式) 求全体学生的学号、姓名和出生年份。SELECT SNO,SNAME,2016-SAGE AS 出生年份 FROM Student; 例3-5: (使用列的别名) 求学生的学号和出生年份,显示时使用别名“学号”和“出生年份”。SELECT SNO AS 学号,2016-SAGE AS 出生年份 FROM Student; 例3-6: (比较大小条件) 求年龄大于19岁的学生的姓名和年龄。SELECT SNAME,SAGE FROM Student WHERE SAGE19; 例3-7: (比较大小条件) 求计算机系或信息系年龄大于18岁的学生的姓名、系和年龄。SELECT SNAME,SDEPT,SAGE FROM Student WHERE SDEPT= CS AND SAGE18; 例3-8: (确定范围条件) 求年龄在19岁与22岁(含20岁和22岁)之间的学生的学号和年龄。SELECT SNO,SAGE FROM Student WHERE SAGE BETWEEN 20 AND 22; 例3-9: (确定范围条件) 求年龄不在19岁与22岁之间的学生的学号和年龄。SELECT SNO,SAGE FROM Student WHERE SAGE NOT BETWEEN 19 AND 22; 例3-10:(确定集合条件) 求在下列各系的学生信息:数学系、计算机系SELECT * FROM Student WHERE SDEPT IN (MA,CS); 例3-11:(确定集合条件) 求不是数学系、计算机系的学生信息。SELECT * FROM Student WHERE SDEPT NOT IN (MA,CS); 例3-12:(匹配查询) 求姓名是以“李”打头的学生。SELECT * FROM Student WHERE SNAME LIKE 李%; 例3-13:(匹配查询) 求姓名中含有“志”的学生。SELECT * FROM Student WHERE SNAME LIKE %志%; 例3-14:(匹配查询) 求姓名长度至少是三个汉字且倒数第三个汉字必须是“马”的学生。SELECT * FROM Student WHERE SNAME LIKE %马_;(未解决) 例3-15:(匹配查询) 求选修课程001或003,成绩在80至90之间,学号为96xxx的学生的学号、课程号和成绩。SELECT SNO,CNO,SCORE FROM Score WHERE CNO IN(001 ,003) AND SCORE BETWEEN 80 AND 90 AND SNO LIKE 96%; 例3-16:(匹配查询) 求课程名中包含 _ 字符的课程号、课程名和学时数。SELECT CNO,CNAME,CTIME FROM Course WHERE CNAME LIKE %_% ESCAPE ;(point) 例3-17:(涉及空值查询) 求缺少学习成绩的学生的学号和课程号。SELECT SNO,CNO FROM Score WHERE SCORE IS NULL; 例3-18:(控制行的显示顺序) 求选修003课程或004课程的学生的学号、课程号和分数,要求按课程号升序、分数降序的顺序显示结果。SELECT * FROM Score WHERE CNO IN (003, 004) ORDER BY CNO,SCORE DESC; 例3-19:(组函数) 求学生总人数。SELECT COUNT(*) FROM Student; 例3-20:(组函数) 求选修了课程的学生人数。SELECT COUNT(DISTINCT SNO) FROM Score; 例3-21:(组函数) 求计算机系学生的平均年龄。SELECT AVG(SAGE) FROM Student WHERE SDEPT= CS; 例3-22:(组函数) 求选修了课程001的最高、最低与平均成绩。SELECT MAX(SCORE),MIN(SCORE),AVG(SCORE) FROM Score WHERE CNO= 001; 例3-23:(分组查询) 求各门课程的平均成绩与总成绩。SELECT AVG(SCORE),SUM(SCORE) FROM Score GROUP BY CNO; 例3-24:(分组查询) 求各系、各班级的人数和平均年龄。SELECT COUNT(SNO),AVG(SAGE) FROM Student GROUP BY SDEPT,SCLASS; 例3-25:(分组查询) 输入以下查询语句并执行,观察出现的其结果并分析其原因. SELECT SNAME,SDEPT,COUNT(*)FROM STUDENT WHERE SDEPT=CS GROUP BY SDEPT;SELECT列表项中不存在的列可以出现在GROUP BY的列表项中,但是SELECT列表中出现的GROUP BY里必须有。此处SNAME未出现在GROUP BY中; 例3-26:(分组查询) 分析以下语句为什么会出现错误。并给出正确的查询语句。 SELECT SAGE FROM STUDENT GROUP BY SNO;SELECT列表项中不存在的列可以出现在GROUP BY的列表项中,但是SELECT列表中出现的GROUP BY里必须有。此处SAGE未出现在GROUP BY中; 例3-27:(分组查询) 求学生人数不足3人的系及其相应的学生数。SELECT SDEPT,COUNT(SNO) FROM Student GROUP BY SDEPT HAVING COUNT (SNO)90 OR SCOREY.SAGE AND Y.SNAME=李丽; 例3-33:(外部连接查询) 求选修了课程002或003的学生的学号、课程号、课程名和成绩,要求必须将002和003课程的相关信息显示出来。 SELECT Score.SNO,Score.CNO,Course.CNAME,SCORE,CTIME FROM Course,Score WHERE Course.CNO IN (002,003) AND Score.CNO=Course.CNO(+); 例3-34:(子查询) 求与 黎明 年龄相同的学生的姓名和系。SELECT SNAME,SDEPT FROM Student WHERE SAGE IN(SELECT SAGE FROM Student WHERE SNAME)=黎明); 例3-35:(子查询) 求选修了课程名为 数据结构 的学生的学号和姓名。SELECT SNO,SNAME FROM Student WHERE SNO IN(SELECT SNO FROM Score WHERE CNO=(SELECT CNO FROM Course WHERE CNAME=数据结构) 例3-36:(子查询ANY) 求比数学系中某一学生年龄大的学生的姓名和系。SELECT SANME SDEPT FROM Student WHERE SAGEANY(SELECT SAGE FROM Student WHERE SDEPT=MA) AND SDEPTMA; 例3-37:(子查询ALL) 求比数学系中全体学生年龄大的学生的姓名和系。SELECT SNAME,SDEPT FROM Student WHERE SAGEALL(SELECT SAGE FROM Student WHERE SDEPT=MA) AND SDEPTMA; 例3-38:(子查询EXISTS) 求选修了课程004的学生的姓名和系。SELECT SNAME,SDEPT FROM Student WHERE EXISTS (SELECT * FROM Score WHERE CNO=004 AND SNO=Student,SNO); 例3-39:(返回多列的子查询) 求与 黎明 同系且同龄的学生的姓名和系。SELECT SNAME,SDEPT FROM Student WHERE SDEPT=(SELECT SDEPT FROM Student WHERE SNAME=黎明 )AND SAGE=(SELECT SAGE FROM Student WHERE SNAME=黎明);(单行子查询返回多个行,因为Student表中有两名学生叫黎明) 例3-40:(多个子查询) 求与 黎明 同系,且年龄大于 李丽 的学生的信息。SELECT * FROM Student WHERE SDEPT=(SELECT SDEPT FROM Student WHERE SNAME=黎明 ) AND SAGE(SELECT SAGE FORM Student WHERE SANME=李丽); (point) 例3-41:(子查询中使用表连接) 求数学系中年龄相同的学生的姓名和年龄。SELECT X.SNAME,X.SAGE FROM Student X,Student Y WHERE X,SAGE=Y.SAGE AND X.SDEPT=MA AND Y.SDEPT=MA AND X.SNOY.SNO; 例3-42:(连接或嵌套查询) 检索至少选修王成刚老师所授课程中一门课程的女学生姓名。SELECT SNAME FROM Student WHERE SNO IN (SELECT SNO FROM Score WHERE CNO IN (SELECT CNO FROM Teach WHERE TNAME=王成刚) 例3-43:(嵌套与分组查询) 检索选修某课程的学生人数多于3人的教师姓名。SELECT TNAME FROM Teach WHRERE CNO IN (SELECT CNO FROM Score GROUP BY CNO HAVING 3AVG(SCORE) AND CNO=SC1.CNO) 例3-49:(相关子查询) 查询被一个以上的学生选修的课程号。SELECT CNO FROM Course WHERE EXISTS (SELECT * FROM Score GROUP BY CNO HAVING COUNT(SNO)1 AND CNO=Course.CNO);例3-50:(相关子查询) 查询所有未选课程的学生姓名和所在系. SELECT SNAME,SDEPT FROM Student WHERE NOT EXISTS(SELECT * FROM Score WHERE SNO=Student.SNO); 实验要求 对数据库表进行各种查询操作。 实验方法 将实验需求用SQL语句表示; 执行SQL语句; 查看执行结果,如果结果不正确,进行修改,直到正确为止。 实验总结 SQL语句以及执行结果; 对重点实验结果进行分析; 实验中的问题和提高; 收获与体会。心得体会:实验3是很重要的知识点,用了50个例子向我一一解释了各种查询数据,其中包括子查询,双重嵌套,三重嵌套,开始的时候学习感觉十分吃力,很多东西都绕在一起,但是学习这个要耐心,理解问题的关键字,理解每句语句的含义,例如在嵌套中要理解每重嵌套的作用,找到关键字的位置,并理解他的作用。还有一些没有弄懂的可以网上百度一下,查阅一些资料。这样才会弄懂问题的本质。要有耐心,才能学好这一章,。实验四:视图、授权控制与事务处理 实验日期 年 月 日 实验目的 通过实验进一步理解视图的建立和更新、数据库的权限管理和事务处理功能。 实验内容 4 SQL视图的定义与操纵: 例4-1: (建立视图) 建立计算机系的学生的视图STUDENT_CS。create view STUDENT_CS as select * from Student where SDEPT=CS; 例4-2: (建立视图) 建立由学号和平均成绩两个字段的视图STUDENT_GR.create view STUDENT_GR(SNO,AG) as select SNO,AVG(SCORE) ag from Score group by SNO; 例4-3: (视图查询) 利用视图STUDENT_CS,求年龄大于19岁的学生的全部信息。select * from STUDENT_CS where SAGE19; 例4-4: (视图查询) 利用视图STUDENT_GR,求平均成绩为88分以上的学生的学号和平均成绩。select SNO,AG from STUDENT_GR where AG88; 例4-5: (视图更新) 利用视图STUDENT_CS,增加学生( 96006,张然,CS,02,男,19 )。insert into STUDENT_CS values(96006,张然,CS,02,男,19); 例4-6: (视图更新) 利用视图STUDENT_CS,将学生年龄增加1岁。观察其运行结果并分析原因。update STUDENT_CS set SAGE=SAGE+1; 例4-7: (视图更新) 利用视图STUDENT_GR,将平均成绩增加2分。观察其运行结果并分析原因。update STUDENT_GR set AG=AG+2; 例4-8: (视图更新) 删除视图STUDENT_CS中学号为 96006 的学生的全部数据。delete from STUDENT_CS where SNO=96006; 例4-9: (视图更新) 删除视图STUDENT_GR的全部数据。delete from STUDENT_GR; 例4-10:(删除视图) 删除视图STUDENT_CS和STUDENT_GR。drop view STUDENT_CS;drop view STUDENT_GR;5 SQL数据控制语句: 例5-1: (授权) 给左右邻近同学(用户)授予在表Student上的SELECT权限,并使这两个用户具有给其他用户授予相同权限的权限。grant select on Student to U149074352,U149074351 with grant option; 例5-2: (授权) 给邻近同学(用户)授予Teach表上的所有权限。grant all on Teach to U149074352,U149074351 例5-3: (授权) 给所有用户授予Score表上的SELECT权限。grant select on Score to public; 例5-4: (授权验证) 观察左右邻近同学查询你所授权的表中的内容。 例5-5: (收回授权) 收回上面例子中的所有授予的权限。revoke select on Student from U149074352,U149074351;revoke all on Teach fromU149074352,U149074351;revoke select on Score from public;6 SQL事务处理: 例6-1: (事务回退) 将课程名称表中的 程序设计 课程学时数修改为80、微机原理 课程学时数修改为70学时,查询全部课程的总学时数后,取消所有修改(ROLLBACK)。再次查询全部课程的总学时数。注意比较分析两次查询的结果。update Course set CTIME=80 where CNAME=程序设计;update Course set CTIME=70 where CNAME=微机原理;select CNO,SUM(CTIME) from Course group by CNO;rollback;select CNO,SUM(CTIME) from Course group by CNO; 例6-2: (事务提交) 将课程名称表中的 程序设计 课程学时数修改为80、微机原理 课程学时数修改为70学时,查询全部课程的总学时数后,确认所有修改(COMMIT)。再次查询全部课程的总学时数。注意比较分析两次查询的结果。update Course set CTIME=80 where CNAME=程序设计;update Course set CTIME=70 where CNAME=微机原理;select CNO,SUM(CTIME) from Course group by CNO;commit;select CNO,SUM(CTIME) from Course group by CNO 实验要求 建立视图,视图查询,视图更新; 给某一或全部用户授权和收回授权; 事务回退,事务提交。 实验方法 将实验需求用SQL语句表示; 执行SQL语句; 查看执行结果,如果结果
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 邳州高考联考试卷真题及答案
- 安全操作规程考试试题及答案
- wedo考核题目及答案
- 工业自动化控制网络技术在农药制造中的应用与发展报告
- 2025年月国开(中央电大)法学专科民法学期末考试试题及答案
- 新工人岗前培训考试题库及答案
- 新能源汽车制造产业布局与充电基础设施发展关系研究报告
- 2025-2030物流可视化技术选型指南及实施成本效益分析
- 2025-2030注塑机行业节能技术分析及汽车轻量化应用投资潜力报告
- 2024年甘肃省天水老年大学教师招聘真题
- 护工清洁护理培训
- 厂房钢结构屋面与彩钢板施工规划与方案
- 2025年党建知识竞赛题库及答案(完整版)
- 施工现场防汛安全检查记录表
- 烹饪高级技师论文
- 扭扭棒手工培训
- 服务沟通技巧培训课件
- 2025年沙流河实业集团有限公司(企业信用报告)
- 无人机驾驶证考试试题及答案大全
- 教培合同协议书范本
- 贵州省六盘水市2024-2025学年高一3月月考语文试题(解析版)
评论
0/150
提交评论