《数据库系统》实验大纲 ver20.docx
《《数据库系统》实验大纲 ver20.docx》由会员分享,可在线阅读,更多相关《《数据库系统》实验大纲 ver20.docx(29页珍藏版)》请在冰豆网上搜索。
《数据库系统》实验大纲ver20
《数据库系统》实验大纲
本实验大纲尚未定稿,因此会经常改进,建议大家每次上机前重新下载,由于尚未定稿,可能存在错误,发现后联系我,我的邮箱:
lbd@,我的QQ:
723812464
总体介绍(请全面阅读本介绍,可以避免走弯路)
一、实验学时数:
8*2
二、实验环境
数据库系统:
oracle11
Oracle控制台地址:
https:
//211.87.224.23:
1158/em
oracle监听地址端口:
211.87.224.23:
1521
oracleSERVICE_NAME:
orcl
Oracle实例名:
orcl
Ftp服务器地址:
211.87.224.23,用户密码:
db/dbsystem
主用户/密码:
userID/123(ID为本人学号,以下相同,例如user201000300001)
备用用户/密码:
userbID/123
三、上机签到
1、每周上机需要签到,签到只能够在机房的电脑上进行
2、签到方法:
执行updatedbsignsetsign=’hello’
3、查看签到情况:
执行select*fromdbsign
4、签到次数达不到6次,实验成绩得90%。
四、实验要求
严格按设计要求进行实验,表名、列名、类型、长度、以及数据等严格按要求,不要做简称等变化,否则系统会判为错误。
五、建议(可以不看)
1、要把实验当做实际开发工作一样对待,严格按设计要求执行。
实际工作中对数据库的操作不仅仅是一门技术,更是一种技能,为什么是一种技能?
你虽然会操作,别人一个小时完成的工作,你需要一天才能够完成,或者完成以后被发现和要求的不一致,还需要重新返工,而且有的时候操作失误可能带来无法挽回的损失。
因此,本实验要求大家严格按大纲要求正确输入表名、列名及数据。
2、学习计算机经常出现的现象就是,“一学就全会了,一做就全完成,一验收全错了(张冠李戴、缺斤少两),一指点全改了”。
所以,从开始就要严格要求自己,实际工作中,一点点也不能够有错误,从开始就养成一个严谨的好习惯。
有时候前面错误会给后来工作带来很大的麻烦,例如:
表名、列名错了,往往在发现错误的时候,数据已经输入很多,此时修改,需要先备份、再改表、再恢复数据。
六、Oracle相关知识简介(工作后一定会有用)
1、Oracle字符串使用单引号分隔,不可以用双引号。
2、伪列:
所谓伪列就是表中不存的列,可是像使用其他存在的列一样访问这些列。
常用的伪列有today、now、rownum、rowid、sysdate。
3、常用的几个函数:
to_char()、to_date(‘20100101’,’yyyy-mm-ddhh24:
mi:
ss’)、取子串substr()、子串查找instr()。
4、表的复制,Createtable表名asselect语句将查询结果自动创建一个新表,也就是实现表的复制,当select查询语句存在表达式的,可以通过属性更名来指定列名。
例如:
createtablestudent_avg_scoreasselectsno,sname,avg(score)avg_scorefrom来指定列名。
5、查询当前用户所有表的命令:
select*fromtab,查询所有人所有表的命令:
select*fromall_tables
6、Oracle中没有except关键词,与其等价的是minus关键词。
在使用minus时,select语句不能够使用括号,例如select*fromstudentwhere……minusselect*fromstudent……,错误写法是(select*fromstudentwhere……)minus(select*fromstudent……)。
7、表别名的定义不能够有As,例如正确的写法select*fromstudents,错误的写法是select*fromstudentass。
8、查询表的列属性的命令descpub.student
七、数据库空间配额
1、userID用户可用空间200m,userbID用户可用空间50m。
2、如果出现错误:
“ORA-01536:
超出表空间'USERS'的空间限额”,说明你的查询结果不正确,造成查询出来的数据太大,超过你空间配额。
八、交实验、查结果
1、按照实验要求完成当天部分或者全部作业后,通过执行:
updatedbtestsettest=1
其中:
1代表实验一,2代表实验二,以此类推。
2、建议完成一个或者两个题目后,就交实验,这有利于及时发现错误并修改。
3、后台的《数据库实验平台系统》会在5秒之内自动验证你的作业正确性,并形成你的本次实验成绩。
4、可以随时查询你的作业正确与否,通过执行:
通过执行:
select* fromdbscore
5、如果验证没有通过,你可以根据错误描述进行修改,然后再重新交实验。
九、评分标准
1、每周实验都有要求完成时间,可以提前进行后面的实验。
2、每个小题按时完成计全分,超时完成计80%。
3、总成绩求和为实验总分,按10分制折算后计入考试成绩。
4、如果签到次数<6次,则折算后成绩按90%计入考试成绩。
5、对认真上机但成绩没有达到10分的学生,根据统计情况,会有2-3分加分。
一十、测试数据
由于学生不可能在实验期间插入大量的数据,因此实验课之前老师已经在数据库中建了一个公用用户pub,在这个用户下建立了实验用表,并且插入了大量的实验数据,本实验主要内容就是根据这些表进行操作。
这些表已经授权给所有用户可以进行查询,但是不能够修改里面的数据。
表名
类型
数据行数
说明
COURSE
表
140
课程信息
DEPARTMENT
表
7
院系信息
DEPARTMENT_41
表
20
院系信息1-实验三专用
STUDENT
表
4000
学生信息
STUDENT_41
表
4000
学生信息-实验三专用
STUDENT_42
表
3000
学生信息-实验三专用
STUDENT_31
表
4000
学生信息-实验四专用
STUDENT_COURSE
表
14000
学生选课
STUDENT_COURSE_32
表
14000
学生选课-实验四专用
STUDENT_TRIGGER
表
0
学生信息-实验七专用
TEACHER
表
200
教师信息
TEACHER_COURSE
表
40
教师授课信息
TEST8_INSERT
视图
嵌入SQL实验专用
TEST8_SELECT
视图
嵌入SQL实验专用
TEST8_UPDATE
视图
嵌入SQL实验专用
实验一
熟悉环境、建立/删除表、插入数据(2学时)
一十一、实验内容
利用oracle管理平台登入本人主用户userID,例如user201000300001,在主用户下,创建如下5个表,合理确定每一个表的主键并建立主键,准确输入表格中的3行数据。
表名、列名采用英文,oracle不区分大小写,有notnull的列代表不允许为空。
1.教师信息(教师编号、姓名、性别、年龄、院系名称)
test1_teacher:
tidchar6notnull、namevarchar10notnull、sexchar2、ageint、dnamevarchar10。
根据教师名称建立一个索引。
教师编号
教师姓名
性别
年龄
院系名称
100101
100102
100103
张老师
李老师
马老师
男
女
男
44
45
46
计算机学院
软件学院
计算机学院
2.学生信息(学生编号、姓名、性别、年龄、出生日期、院系名称、班级)
test1_student:
sidchar12notnull、namevarchar10notnull、sexchar2、ageint、birthdaydate(oracle的date类型是包含时间信息的,时间信息全部为零)、dnamevarchar10、classvarchar(10)。
根据姓名建立一个索引。
学号
姓名
性别
年龄
出生日期
院系名称
班级
200800020101
200800020102
200800020103
王欣
李华
赵岩
女
女
男
19
20
18
1994-2-2
1995-3-3
1996-4-4
计算机学院
软件学院
软件学院
2010
2009
2009
3.课程信息(课程编号、课程名称、先行课编号、学分)
test1_course:
cidchar6notnull、namevarchar10notnull、fcidchar6、
creditnumeric2,1(其中2代表总长度,1代表小数点后面长度)。
根据课程名建立一个索引。
课程号
课程名
先行课程号
学分
300001
300002
300003
数据结构
数据库
操作系统
300001
300001
2
2.5
4
4.学生选课信息(学号、课程号、成绩、教师编号)
test1_student_course:
sidchar12notnull、cidchar6notnull、
scorenumeric5,1(其中5代表总长度,1代表小数点后面长度)、tidchar6。
学号
课程号
成绩
教师编号
200800020101
200800020101
200800020101
300001
300002
300003
91.5
92.6
93.7
100101
100102
100103
5.教师授课信息(教师编号、课程编号)
test1_teacher_course:
tidchar6notnull,cidchar6notnull。
教师编号
课程号
100101
100102
100103
300001
300002
300003
一十二、重要提醒
1.登入号为userID,ID为本人学号,例如user201000300001,密码123。
2.Oracle管理平台一次只能够执行一条语句,如果输入了多条,可以通过选中一条后执行。
3.执行非select前取消“只执行SELECT”选项,选中“自动提交”选项,这相当于每句话后自动执行了commit。
4.执行完一句话后,一定要看执行结果信息或者错误信息。
5.输入日期类型数据的格式:
采用date’2001-2-2’
例如insertintot1values(date’2012-02-02’)
或者
采用to_date(‘20100101’,‘yyyymmdd’)函数
例如:
insertintot1values(to_date(’20120202’,’yyyymmdd’))
6.创建全部或者部分表后,交实验,如果有错误,修改以后重新交实验。
7.如果建表错误,可以通过droptabletablename删除表后重建。
8.建议将执行完成语句,拷贝到记事本中存盘,防止丢失。
一十三、实验步骤
1.启动oracle管理平台,浏览器地址输入:
https:
//211.87.224.23:
1158/em
2.显示登入画面,使用本人账号/密码:
userID/123(ID为本人学号)登入系统。
3.如果出现证书问题,可以忽略提示继续。
4.如果仍然无法出现如下登入画面,需要删除你电脑上面windows的一个补丁kb2661245,这个补丁限制了证书错误不能够启动画面。
或者,也可以使用firefox浏览器,就能够解决证书问题。
5.
点击SQL工作表,系统打开sql工作表窗口,就可以执行SQL命令了。
6.
取消“只允许SELECT”,选中“自动提交”。
取消“只允许SELECT”,才能够执行update、insert等命令。
选中“自动提交”,代表每一条命令执行完后系统自动提交,也就是系统自动执行commit。
7.执行updatedbsignsetsign=’hello’完成本周签到,以后每周都要签到。
8.执行select*fromdbsign,查看签到情况。
9.创建上面要求的5个表student,course,teacher,student_course,teacher_course,实际工作中建表不能够有一点偏差,因此从现在开始就养成严谨的工作习惯,要求学生严格按上面设计,正确输入表名、列名、类型、长度。
10.为5个表插入表格中要求的3行数据,每张表最少插入此3行数据,插入的数据可以多于3行。
11.如果上课还没有讲到插入语句,请参考下图的例子完成,注意空值的插入使用null。
插入日期类型数据,格式参考前面的说明。
12.本实验要求插入的3行数据必须和要求的绝对一致,也不能够有多余的空格,否则作业将无法通过验证。
13.交实验通过执行执行:
updatedbtestsettest=1
14.5秒钟后查询本周实验正确性,通过执行
select*fromdbscore
15.如果有错误修正后,重新交实验。
16.本实验总得分为10分,代表本实验全部通过。
实验二
检索查询(2学时)
一十四、实验内容
在oracle管理操作平台,针对公共用户pub下的表,完成下面的查询,你认为你的查询语句正确以后,将查询得出的数据创建成一个新表,新表表名为test2_(题号,题号长度两位,前面补零),例如test2_03。
例如:
找出所有有选课且成绩及格的学生的学号、总成绩。
答案:
selectcid,sum(score)frompub.student_coursewherescore>=60groupbycid
执行(注意别名的写法和用途):
createtabletest2_01asselectsid,sum(score)sum_scorefrompub.student_coursewherescore>=60groupbysid
如果出现错误,可以通过Droptabletest2_01删除已经创建的表,然后重新创建新表。
一十五、实验题目
1.找出没有选修任何课程的学生的学号、姓名。
2.找出至少选修了学号为“200900130417”的学生所选修的一门课的学生的学号、姓名。
3.找出至少选修了一门其先行课程号为“300002”号课程的学生的学号、姓名。
4.找出选修了“操作系统”并且也选修了“数据结构”的学生的学号、姓名。
5.查询20岁的所有有选课的学生的学号、姓名、平均成绩(avg_score,此为列名,下同)(平均成绩四舍五入到个位)、总成绩(sum_score)
Test2_05有四个列,并且列名必须是:
sid、name、avg_score、sum_score。
通过下面方式实现列名定义:
createtabletest2_05asselectsid,name,(表达式)avg_score,(表达式)sum_scorefrom……
6.查询所有课以及这门课的最高成绩,test2_06有两个列:
课程号cid、最高成绩max_score
7.查询所有不姓张、不姓李、也不姓王的学生的学号sid、姓名name
8.查询学生表中每一个姓氏及其人数(不考虑复姓),test2_08有两个列:
second_name、p_count
9.查询选修了300003号课程的学生的sid、name、score
10.查所有有成绩记录的学生sid和cid
一十六、实验步骤
1.登入主用户
2.签到执行:
updatedbsignsetsign=’hello’
3.查看签到情况执行:
select*fromdbsign
4.利用pub用户的下6个表,完成相应的查询语句,检查得到的结果正确性,直到你认为完全正确。
5.通过createtabletest2_01asselect将查询结果创建到对应的表。
6.交实验执行
updatedbtestsettest=2
7.查结果执行
select*fromdbscore
实验三
复制表、删除数据(2学时)
一十七、实验内容
利用oracle管理平台,将pub用户的表及数据复制到主用户下,对不符合要求的数据进行删除。
一十八、实验题目
1.将pub用户下的Student_31及数据复制到主用户的表test3_01,删除表中的学号不是12位数字的错误数据。
2.将pub用户下的Student_31及数据复制到主用户的表test3_02,删除表中的出生日期和年龄不一致(年龄=2012-出生年份)的错误数据。
函数extract(yearfrombirthday)返回birthday的年份
3.将pub用户下的Student_31及数据复制到主用户的表test3_03,删除表中的性别有错误的数据(性别只能够是“男”、“女”或者空值)。
4.将pub用户下的Student_31及数据复制到主用户的表test3_04,删除表中的院系名称有空格的、院系名称为空值的或者院系名称小于3个字的错误数据。
5.将pub用户下的Student_31及数据复制到主用户的表test3_05,删除表中的班级不规范的数据,不规范是指和大多数不一致。
6.将pub用户下的Student_31及数据复制到主用户的表test3_06,删除表中的错误数据,不规范的数据也被认为是错误的数据。
●学号不是12位数字的;
●出生日期和年龄不一致的(年龄=2012-出生年份);
●姓名有空格的或者长度小于2个字的;函数length()返回字符串长度。
●性别有错误的(只能够是“男”、“女”、空值);
●院系名称有空格的、院系名称为空值的;
●院系名称小于3个字的;
●班级数据有错误的(需要先找到班级里面的错误,)。
保留最后全部正确的数据。
7.将pub用户下的Student_course_32及数据复制到主用户的表test3_07,删除其中的错误数据,错误指如下情况:
学号在学生信息pub.student中不存在的;
8.将pub用户下的Student_course_32及数据复制到主用户的表test3_08,删除其中的错误数据,错误指如下情况:
课程号和教师编号在教师授课表pub.teacher_course中不同时存在的,即没有该教师教该课程;
9.将pub用户下的Student_course_32及数据复制到主用户的表test3_09,删除其中的错误数据,错误指如下情况:
成绩数据有错误(需要先找到成绩里面的错误)。
10.将pub用户下的Student_course_32及数据复制到主用户的表test3_10,删除其中的错误数据,错误指如下情况:
(1)学号在学生信息pub.student中不存在的;
(2)课程号在课程信息pub.course中不存在的;
(3)教师编号在教师信息pub.teacher中不存在的;
(4)课程号和教师编号在教师授课表pub.teacher_course中不存在的;
(5)成绩数据有错误(需要先找到成绩里面的错误)。
保留最后正确的数据。
一十九、交实验、签到
1.签到执行:
updatedbsignsetsign=’hello’
2.查看签到情况执行:
select*fromdbsign
3.交实验执行
updatedbtestsettest=3
4.查结果执行
select*fromdbscore
实验四
复制表、修改表结构、修改数据(2学时)
二十、实验内容
利用oracle管理平台完成对表的结构、数据进行修改,每一个问题可以通过多个SQL语句完成。
二十一、实验题目
1.将pub用户下表student_41及数据复制到主用户的表test4_01中,使用altertable语句为表增加五个列:
“总成绩:
sum_score”、“平均成绩:
avg_score”(小数点后保留1位)、“总学分:
sum_credit”、“院系编号:
didvarchar
(2)”。
使用update语句,利用pub.student_course、pub.course,统计“总成绩”;
2.将pub用户下表student_41及数据复制到主用户的表test4_02中,使用altertable语句为表增加五个列:
“总成绩:
sum_score”、“平均成绩:
avg_score”(小数点后保留1位)、“总学分:
sum_credit”、“院系编号:
didvarchar
(2)”。
利用pub.student_course、pub.course,统计“平均成绩”,四舍五入到小数点后1位
3.将pub用户下表student_41及数据复制到主用户的表test4_03中,使用altertable语句为表增加五个列:
“总成绩:
sum_score”、“平均成绩:
avg_score”、“总学分:
sum_credit”、“院系编号:
didvarchar
(2)”。
使用update语句,利用pub.student_course、pub.course,统计“总学分”;
4.将pub用户下表student_41及数据复制到主用户的表test4_04中,使用altertable语句为表增加五个列:
“总成绩:
sum_score”、“平均成绩:
avg_score”、“总学分:
sum_credit”、“院系编号:
didvarchar
(2)”。
根据院系名称到pub.department或者pub.department_41中,找到对应编号,填写到院系编号中,如果都没有对应的院系,则填写为00。
5.将pub用户下表student_41及数据复制到主用户的表test4_05中,使用altertable语句为表增加五个列:
“总成绩:
sum_score”、“平均成绩:
avg_score”、“总学分:
sum_credit”、“院系编号:
didvarchar
(2)”。
(1)利用pub.student_course、pub.course,统计“总成绩”;
(2)利用pub.student_course、pub.course,统计“平均成绩”,四舍五入到小数点后1位;
(3)利用pub.student_course、pub.course,统计“总学分”;
(4)根据院系名称到pub.department或者pub.department_41中,找到对应编号,填写到院系编号中,如果都没有对应的院系,则填写为00。
6.将pub用户下的Student_42及数据复制到主用