《数据库系统》实验大纲,17招教你如何玩转数据库设计

玩转 5
《数据库系统》实验大纲 要求独立完成,严禁大量复制,查实得分减半。
总体介绍(请全面阅读本介绍,可以避免走弯路)
一、实验学时数:8*2二、实验环境 数据库系统:oracle11Oracle控制台地址:https://211.87.224.23:1158/emoracle监听地址端口:211.87.224.23:1521oracleSERVICE_NAME:orclOracle实例名:orclFtp服务器地址:ftp://211.87.224.23,用户/密码:db/dbsystem主用户/密码:userID/123(ID为本人学号,以下相同,例如user201000300001)备用用户/密码:userbID/123
三、操作步骤
1.机房电脑,开启选择xp1或者xp2系统。

2.启动oracle管理平台,浏览器地址输入:https://211.87.224.23:1158/em3.如果出现证书问题,通过下面方式解决。

4.如果仍然无法出现如下登入画面(windows7下ie10不能够进入登入画面),可以安装firefox浏览器(可以到ftp://211.87.224.23上面下载),就能够解决证书问题。

5.显示登入画面,使用本人账号/密码:userID/123(ID为本人学号)登入系统。

6.点击SQL工作表,系统打开sql工作表窗口,就可以执行SQL命令了。

7.取消“只允许SELECT”,选中“自动提交”。
取消“只允许SELECT”,才能够执行update、insert等命令。
选中“自动提交”,代表每一条命令执行完后系统自动提交,也就是系统自动执行mit。

8.输入sql命令,然后执行sql输入框可以输入多条sql命令,使用鼠标选中一条命令,按“执行”按钮,则执行这一条命令。
执行完一条sql后,一定要看执行结果信息或者错误信息。
重要提示:将执行完成语句,拷贝到记事本中存盘,防止丢失。

四、上机签到
1、每周上机需要签到,签到只能够在机房的电脑上进行
2、执行签到之前,务必选中“自动提交”复选框,然后再执行如下语句。

3、签到方法:执行updatedbsignsetsign='hello'
4、查看签到情况:执行select*fromdbsign5、签到次数达不到5次,实验成绩得90%。

6、执行画面如下:
五、实验要求 严格按设计要求进行实验,表名、列名、类型、长度、以及数据等严格按要求,不要做简称等变化,否则系统会判为错误。

六、Oracle相关知识简介
1、伪列:所谓伪列就是表中不存的列,可是像使用其他存在的列一样访问这些列。
常用的伪列有today、now、rownum、rowid、sysdate。

2、常用的几个函数:to_char()、to_date(‘20100101’,’yyyy-mm-ddhh24:mi:ss’)、取子串 substr()、子串查找instr()。

3、表的复制,Createtable表名asselect语句将查询结果自动创建一个新表,也就是实现表的复制, 当select查询语句存在表达式的,可以通过属性更名来指定列名。
例如:createtablestudent_avg_scoreasselectsno,sname,avg(score)avg_scorefrom来指定列名。

4、查询当前用户所有表的命令:select*fromtab,查询所有人所有表的命令:select*fromall_tables5、查询表的结构即列属性的命令:descpub.student6、查询一个用户pub下有哪些表的命令:select*fromall_tableswhereowner=’PUB’
7、查询一个表中所有数据的命令:select*frompub.student
七、Oracle与书上不同之处
1、Oracle字符串使用单引号分隔,不可以用双引号。

2、Oracle中没有except关键词,与其等价的是minus关键词。
在使用minus时,select语句不能够使 用括号,例如select*fromstudentwhere……minusselect*fromstudent……,错误写法是(select*fromstudentwhere……)minus(select*fromstudent……)。

3、表别名的定义不能够有As,例如正确的写法select*fromstudents,错误的写法是select*fromstudentass。

八、数据库空间配额 1、userID用户可用空间200m,userbID用户可用空间50m。

2、如果出现错误:“ORA-01536:超出表空间'USERS'的空间限额”,说明你的查询结果不正确,造成查 询出来的数据太大,超过你空间配额。

九、提交实验、查询结果
1、按照实验要求完成当天部分或者全部作业后,通过执行:updatedbtestsettest=1其中:1代表实验一,2代表实验
二,以此类推。

2、建议完成一个或者两个题目后,就交实验,这有利于及时发现错误并修改。

3、后台的《数据库实验平台系统》会在5秒之内自动验证你的作业正确性,并形成你的本次实验成绩。

4、可以随时查询你的作业正确与否,通过执行: 通过执行:select*fromdbscore5、如果验证没有通过,你可以根据错误描述进行修改,然后再重新交实验。

十、评分标准
1、每周实验都有要求完成时间,可以提前进行后面的实验。

2、每个小题按时完成计全分,超时完成计80%。

3、总成绩求和为实验总分,按10分制折算后计入考试成绩。

4、如果签到次数<6次,则折算后成绩按90%计入考试成绩。

5、对认真上机但成绩没有达到10分的学生,根据统计情况,会有2-3分加分。

一、测试数据 由于学生不可能在实验期间插入大量的数据,因此实验课之前老师已经在数据库中建了一个公用用户 pub,在这个用户下建立了实验用表,并且插入了大量的实验数据,本实验主要内容就是根据这些表进行操 作。
这些表已经授权给所有用户可以进行查询,但是不能够修改里面的数据。
查询一个用户
pub下有哪些表的命令: select*fromall_tableswhereowner=’PUB’ 查询一个表中的结构的命令: descpub.student 查询一个表中所有数据的命令: select*frompub.student 表名 数据行类型 数 说明 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实验专用 十
二、建议(可以不看)
1、要把实验当做实际开发工作一样对待,严格按设计要求执行。
实际工作中对数据库的操作不仅仅是一门技术,更是一种技能,为什么是一种技能?你虽然会操作,别人一个小时完成的工作,你需要一天才能够完成,或者完成以后被发现和要求的不一致,还需要重新返工,而且有的时候操作失误可能带来无法挽回的损失。
因此,本实验要求大家严格按大纲要求正确输入表名、列名及数据。

2、学习计算机经常出现的现象就是,“一学就全会了,一做就全完成,一验收全错了(张冠李戴、缺斤少两),一指点全改了”。
所以,从开始就要严格要求自己,实际工作中,一点点也不能够有错误,从开始就养成一个严谨的好习惯。
有时候前面错误会给后来工作带来很大的麻烦,例如:表名、列名错了,往往在发现错误的时候,数据已经输入很多,此时修改,需要先备份、再改表、再恢复数据。
实验一熟悉环境、建立/删除表、插入数据(2学时)
一、实验内容 利用oracle管理平台登入本人主用户userID,例如user201000300001,在主用户下,创建如下5个表, 合理确定每一个表的主键并建立主键,准确输入表格中的3行数据。
表名、列名采用英文,oracle不区分大小 写,有notnull的列代表不允许为空。

1.教师信息(教师编号、姓名、性别、年龄、院系名称) test1_teacher:tidchar6notnull、namevarchar10notnull、sexchar2、ageint、dnamevarchar 10。
根据教师名称建立一个索引。
教师编号 教师姓名性别年龄 院系名称 100101 张老师 男 44 计算机学院 100102 李老师 女 45 软件学院 100103 马老师 男 46 计算机学院
2.
学生信息(学生编号、姓名、性别、年龄、出生日期、院系名称、班级) test1_student:sidchar12notnull、namevarchar10notnull、sexchar2、ageint、birthday date(oracle的date类型是包含时间信息的,时间信息全部为零)、dnamevarchar10、class varchar(10)。
根据姓名建立一个索引。
学号 姓名 性别年龄出生日期院系名称班级 200800020101 王欣 女 191994-2-2计算机学院2010 200800020102 李华 女 201995-3-3软件学院 2009 200800020103 赵岩 男 181996-4-4软件学院 2009
3.课程信息(仅考虑一门课程最多一个先行课的情况)(课程编号、课程名称、先行课编号、学分)test1_course:cidchar6notnull、namevarchar10notnull、fcidchar6、creditnumeric2,1(其中2代表总长度,1代表小数点后面长度)。
根据课程名建立一个索引。
课程号300001300002300003 课程名数据结构 数据库操作系统 先行课程号 300001300001 学分22.54
4.学生选课信息(学号、课程号、成绩、教师编号) test1_student_course:sidchar12notnull、cidchar6notnull、 scorenumeric5,1(其中5代表总长度,1代表小数点后面长度)、tidchar6。
学号 课程号 成绩 教师编号 200800020101 300001 91.5 100101 200800020101 300002 92.6 100102 200800020101 300003 93.7 100103
5.
教师授课信息(教师编号、课程编号) test1_teacher_course:tidchar6notnull,cidchar6notnull。
教师编号 课程号 100101 300001 100102 300002 100103 300003
二、重要提醒
1.输入日期类型数据的格式:采用date’2001-2-2’例如insertintot1values(date’2012-02-02’)或者采用to_date(‘20100101’,‘yyyymmdd’)函数例如:insertintot1values(to_date(’20120202’,’yyyymmdd’))
2.创建全部或者部分表后,交实验,如果有错误,修改以后重新交实验。

3.如果建表错误,可以通过droptabletablename删除表后重建。

4.建议将执行完成语句,拷贝到记事本中存盘,防止丢失。

三、实验步骤
1.启动oracle管理平台,浏览器地址输入:https://211.87.224.23:1158/em2.点击SQL工作表,系统打开sql工作表窗口,就可以执行SQL命令了。

3.取消“只允许SELECT”,选中“自动提交”。

4.创建上面要求的5个表test1_student,test1_course,test1_teacher,test1_student_course, test1_teacher_course,实际工作中建表不能够有一点偏差,因此从现在开始就养成严谨的工作习惯,
要求学生严格按上面设计,正确输入表名、列名、类型、长度。

5.为5个表插入表格中要求的3行数据,每张表最少插入此3行数据,插入的数据可以多于3行。
如果提交作业后,显示比答案少几行,错误原因是你插入的数据和大纲要求的三行数据不一样,系统要求插入的三行数据必须和大纲要求的完全一致,也不能够多空格。

6.如果上课还没有讲到插入语句,请参考下图的例子完成,注意空值的插入使用null。
插入日期类型数据,格式参考前面的说明。

7.本实验要求插入的3行数据必须和要求的绝对一致,也不能够有多余的空格,否则作业将无法通过验证。

8.交实验通过执行执行:updatedbtestsettest=19.5秒钟后查询本周实验正确性,通过执行select*fromdbscore10.如果有错误修正后,重新交实验。
11.本实验总得分为10分,代表本实验全部通过。
实验二检索查询(2学时)
一、实验内容 在oracle管理操作平台,针对公共用户pub下的表,完成下面的查询,你认为你的查询语句正确以后,将查询得出的数据创建成一个新表,新表表名为test2_(题号,题号长度两位,前面补零),例如test2_03。
例如:找出所有有选课且成绩及格的学生的学号、总成绩。
答案:selectsid,sum(score)frompub.student_coursewherescore>=60groupbysid执行(注意别名的写法和用途):createtabletest2_01asselectsid,sum(score)sum_scorefrompub.student_coursewherescore>=60groupbysid如果出现错误,可以通过Droptabletest2_01删除已经创建的表,然后重新创建新表。

二、基础知识
1.查询本人有哪些表的命令select*fromtab
2.查询本实验大纲公共用户pub下的有哪些表的命令:select*fromall_tableswhereowner=’PUB’
3.查询一个表中的结构的命令:descpub.student
4.查询一个表中所有数据的命令:select*frompub.student
三、实验题目
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_score7.查询所有不姓张、不姓李、也不姓王的学生的学号sid、姓名name8.查询学生表中每一个姓氏及其人数(不考虑复姓),test2_08有两个列:second_name、p_count9.查询选修了300003号课程的学生的sid、name、score10.查所有有成绩记录的学生sid和cid
四、实验步骤
1.登入主用户
2.签到执行: updatedbsignsetsign=13.查看签到情况执行: select*fromdbsign4.利用pub用户的下个表(查询用户下的表的命令select*fromall_tableswhereowner=’PUB’,查 询pub用户下的student表中列及数据的指令select*frompub.student),完成相应的查询语句,检查得到的结果正确性,直到你认为完全正确。

5.通过createtabletest2_01asselect将查询结果创建到对应的表。

6.交实验执行updatedbtestsettest=27.查结果执行select*fromdbscore 实验三复制表、删除数据(2学时)
一、实验内容 利用oracle管理平台,将pub用户的表及数据复制到主用户下,对不符合要求的数据进行删除。

二、实验题目
1.将pub用户下的Student_31及数据复制到主用户的表test3_01,删除表中的学号不全是数字的那些错误数据,学号应该是数字组成,不能够包含字母空格等非数字字符。

2.将pub用户下的Student_31及数据复制到主用户的表test3_02,删除表中的出生日期和年龄(截止到2012年的年龄,即年龄=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,删除表中的错误数据,不规范的数据也被认为是那些错误数据。
学号不全是数字;出生日期和年龄不一致的(年龄=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=1
2.查看签到情况执行:select*fromdbsign
3.交实验执行updatedbtestsettest=3
4.查结果执行select*fromdbscore 实验四复制表、修改表结构、修改数据(2学时)
一、实验内容 利用oracle管理平台完成对表的结构、数据进行修改,每一个问题可以通过多个SQL语句完成。

二、实验题目
1.将pub用户下表student_41及数据复制到主用户的表test4_01中,使用altertable语句为表增加列:“总成绩:sum_score”。
使用update语句,利用pub.student_course、pub.course,统计“总成绩”;
2.将pub用户下表student_41及数据复制到主用户的表test4_02中,使用altertable语句为表增加列“平均成绩:avg_score”(小数点后保留1位)。
利用pub.student_course、pub.course,统计“平均成绩”,四舍五入到小数点后1位
3.将pub用户下表student_41及数据复制到主用户的表test4_03中,使用altertable语句为表增加列:“总学分:sum_credit”。
使用update语句,利用pub.student_course、pub.course,统计“总学分”;这是需要注意:成绩及格才能够计算所得学分。

4.将pub用户下表student_41及数据复制到主用户的表test4_04中。
根据列院系名称dname到pub.department中找到对应院系编号did,将对应的院系编号回填到院系名称列dname中,如果表中没有对应的院系名称,则列dname中内容不变仍然是原来的内容。
答案尚未完善,
5.将pub用户下表student_41及数据复制到主用户的表test4_05中,使用altertable语句为表增加
4 个列:“总成绩: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及数据复制到主用户的表test4_06中,对表中的数据进行整理,修复那些 不规范的数据:剔除姓名列中的所有空格;
7.将pub用户下的Student_42及数据复制到主用户的表test4_07中,对表中的数据进行整理,修复那些 不规范的数据:对性别列进行规范(需要先确定哪些性别数据不规范,也就是那些和大多数不一样的就是不规范的);
8.将pub用户下的Student_42及数据复制到主用户的表test4_08中,对表中的数据进行整理,修复那些不规范的数据:对班级列进行规范(需要先确定哪些班级不规范)。

9.将pub用户下的Student_42及数据复制到主用户的表test4_09中,对表中的数据进行整理,修复那些不规范的数据:年龄为空值的根据出生日期设置学生年龄(截止到2012年的年龄,即年龄=2012-出生年份),年龄不为空值的不要改变。
10.将pub用户下的Student_42及数据复制到主用户的表test4_10中,对表中的数据进行整理,修复那些不规范的数据:
(1)剔除姓名列中的所有空格;
(2)剔除院系名称列中的所有空格;
(3)对性别列进行规范(需要先确定哪些性别数据不规范,也就是那些和大多数不一样的就是不规范的);
(4)对班级列进行规范(需要先确定哪些班级不规范)。

(5)年龄为空值的根据出生日期设置学生年龄(截止到2012年的年龄,即年龄=2012-出生年份),年龄不为空值的不要改变。

三、交实验、签到
1.签到执行:updatedbsignsetsign=1
2.查看签到情况执行:select*fromdbsign
3.交实验执行updatedbtestsettest=4
4.查结果执行select*fromdbscore 实验五数据修改的提交和回退、实体授权(2学时) 本实验可以两个同学用两台机器登入其中一人的主备账号,共同完成,最后得出的结果各自独立填写提交实验
一、实验内容 oracle管理平台,分别用主账号userID、备用账号userbID登入数据库,测试提交和回退的作用。
启动两个数据库回话的方法:用两个账号登入数据库的办法由几种:
1、安装oracle客户端(ftp服务器可以下载oracle客户端),使用sqlplus分别登入两个账号。
(关于oracle客户端下载、安装及操作网上自己寻找)
2、使用两个不同的浏览器(例如一个微软的浏览器、一个360的浏览器),分别登入两个账号。

3、使用两个台不同的电脑,采用浏览器分别登入两个账号,下面以此为例介绍实验步骤。

二、实验步骤
1.在一台计算机上使用主用户userID登入数据库,取消“自动提交”选项,取消“只允许select”选项,简称主窗口。

2.在另一台计算机使用备用用户userbID登入数据库,取消“自动提交”选项,取消“只允许select”选项,简称备用窗口。

3.主用户访问备用用户的表之前,需要在备用账号中将相应的表的相应的权限授权给主用户,这样主用户才可以查询操作备用用户的相应的表。
在主用户下可以执行select*fromuserbId.test5_00查询备用用户的表test5_00的数据,如果没 有授权,则会提示表没有表找到。
如果备用用户执行grantselectontest5_00touserID,即授权表test5_00的select权限给用户 userID,上面的查询语句就可以正确执行,并查询到相应的结果。

4.常用的授权、命令: grantselectontest5_00touserID授权表test5_00的select权限给用户userID。
grantupdateontest5_00touserID授权表test5_00的update权限给用户userID。
grantinsertontest5_00touserID授权表test5_00的insert权限给用户userID。
grantdeleteontest5_00touserID授权表test5_00的delete权限给用户userID。
grantallontest5_00touserID授权表test5_00的all权限给用户userID。
revokeselectontest5_00fromuserID收回表test5_00的insert权限从用户userID。

5.在备用用户下将pub.teacher复制到test5_00中,然后将其所有权限给主用户。

6.按表中序号在相应窗口执行对应的命令(主用户访问备用用户表需要授权)。
序号12345679101112131415161718 窗口备用窗口备用窗口备用窗口备用窗口备用窗口备用窗口备用窗口备用窗口备用窗口备用窗口备用窗口主窗口备用窗口备用窗口备用窗口主窗口主窗口 19主窗口 20主窗口 21主窗口 题号结果
1 结果2结果3结果4结果5结果
6 22备用窗口结果723备用窗口 24备用窗口 25备用窗口结果
8 26主窗口27主窗口 结果
9 执行语句Updatetest5_00setage=88select*fromtest5_00CommitrollbackUpdatetest5_00setage=age+1mitUpdatetest5_00setage=age+mitselect*fromtest5_00rollbackselect*fromuserbID.test5_00Updatetest5_00setage=age-2Updatetest5_00setage=age-2select*fromtest5_00select*fromuserbID.test5_00 Commit 结果88 select*fromuserbID.test5_00 Rollback UpdateuserbID.test5_00setage=age-10 注意锁等待现象,可 以继续后面步骤 select*fromtest5_00 Createtabletest5_01asselect*from test5_00 rollback select*fromuserbID.test5_00 select*fromuserbID.test5_00rollback 28主窗口结果10select*fromuserbID.test5_00
7.假设数据中有张老师,通过上面的操作以后,他在每次查询的时候的年龄是多少?根据你的判断得出结 果,然后按步骤进行实验验证,在主用户下创建一个表test5_10(testvarchar(20),agenumeric
(3)), 插入10行数据,分表存放10个结果。
test age 结果
1 88 结果
2 结果
3 结果
4 结果
5 结果
6 结果
7 结果
8 结果
9 结果10
三、交实验、签到
1.签到执行:updatedbsignsetsign=1
2.查看签到情况执行:select*fromdbsign
3.交实验执行updatedbtestsettest=5
4.查结果执行select*fromdbscore 实验六创建视图、删除视图(2学时)
一、实验内容 oracle管理平台,针对公共用户pub下的表,完成创建视图、查询验证视图、删除视图。
视图名为test6_(题号,题号长度两位,前面补零),例如test6_01。
严禁事项: 创建的视图后,必须查询视图,验证结果正确性,在自己没有人工验证前,严禁执行“updatedbtestsettest=6”交实验,这可能造成oracle系统死机,影响全体同学上机实验。

二、实验题目 例如:找出年龄小于20岁的所有学生的学号、姓名、年龄正确执行:createviewtest6_00asselectsid,name,agefrompub.studentwhereage>20
1.找出年龄小于20岁且是“物理学院”的学生的学号、姓名、院系名称,按学号排序。

2.查询统计2009级、软件学院每个学生的学号、姓名、总成绩(列名sum_score)。

3.查询2010级、计算机科学与技术学院、操作系统的学生成绩表,内容有学号、姓名、成绩。

4.找出选修“数据库系统”课程,且成绩大于90的学生的学号、姓名
5.找出姓名叫“李龙”的学生的学号及其选修全部课程的课程号、课程名和成绩。

6.找出选修了所有课程的学生的学号、姓名
7.找出选修了所有课程并且所有课程全部及格的学生的学号、姓名
8.检索先行课的学分为2的课程号、课程名。

9.查询统计2010级、化学与化工学院的学生总学分表,内容有学号、姓名、总学分sum_credit。
10.找出有间接先行课的所有课程的课程号、课程名称。

三、交实验、签到
1.签到执行:updatedbsignsetsign=1
2.查看签到情况执行:select*fromdbsign
3.交实验执行updatedbtestsettest=6
4.查结果执行select*fromdbscore 实验七综合查询(2学时) 实验题目
1.在学生表pub.student中统计名字(姓名的第一位是姓氏,其余为名字,不考虑复姓)的使用的频率, 将统计结果放入test7_01中,表结构如下。
First_namevarchar
(4) frequencynumeric
(4) 国强 1034 红 1232 卫东 2323 ………………
2.在学生表pub.student中统计名字(姓名的第一位是姓氏,不作统计,名字指姓名的第二个之后的汉字) 的每个字使用的频率,将统计结果放入test7_02中(特别提示:需要区别union和unionall的不同), 表结构如下。
lettervarchar
(2) frequencynumeric
(4) 锋 1034 红 1232 鹏 2323 ………………
3.创建“学院班级学分达标情况统计表1”test7_03,依据pub.student,pub.course,pub.student_course 统计形成表中各项数据,成绩>=60为及格计入学分,总学分>=10为达标,院系为空值的数据不统计在 下表中,表结构:院系名称dname、班级class、学分达标人数p_count1、学分未达标人数p_count2、 总人数p_count。
Dname class P_count1 P_count2 P_count varchar(30)varchar(10)Int int int 计算机学院 2006 计算机学院 2007 软件学院 2006 ………………
4.创建“学院班级学分达标情况统计表2”test7_04,依据pub.student,pub.course,pub.student_course 统计形成表中各项数据,成绩>=60为及格计入学分,2008级及之前的班级总学分>=8为达标,2008级 之后的班级学分>=10未达标,院系为空值的数据不统计在下表中,表结构:院系名称dname、班级class、 学分达标人数p_count1、学分未达标人数p_count2、总人数p_count。
Dname class P_count1 P_count2 P_count varchar(30)varchar(10)int int int 计算机学院 2006 计算机学院 2007 软件学院 2006 ……………… 实验八报表统计(2学时) 实验题目
1.查询各院系(不包括院系名称为空的)的数据结构平均成绩avg_ds_score、操作系统平均成绩avg_os_score, 平均成绩四舍五入到个位,创建表test8_01,表结构及格式如下: Dname Avg_ds_score Avg_os_score 马克思主义学院 72 70 软件学院 77 74 艺术学院 77 76 医学院 74 73
2.
查询”计算机科学与技术学院”的同时选修了数据结构、操作系统两门课的学生的学号sid、姓名name、院系名称dname、数据结构成绩ds_score、操作系统成绩os_score,创建表test8_02,表结构及格式如下:
3.查询计算机科学与技术学院的选修了数据结构或者操作系统的学生的学号sid、姓名name、院系名称dname、数据结构成绩ds_score、操作系统成绩os_score,创建表test8_03,表结构及格式如下:
4.查询计算机科学与技术学院所有学生的学号sid、姓名name、院系名称dname、数据结构成绩ds_score、操作系统成绩os_score,创建表test8_04,表结构及格式如下 实验九建立触发器、测试触发器(选作,不计成绩)
一、实验内容 创建触发器需要启动sqlplus完成创建触发器、测试触发器,oracle管理平台没有测试通过。
安装oracle客户端启动sqlplus的命令,输入userID/123@211.87.224.23/orcl登入(最新的客户端支持这个书写格式)
二、实验步骤
1.登入主用户。

2.通过语句“createtabletest9_01asselect*frompub.studentwhere1>2”创建一个空表test9_01。

3.在表test9_01上创建一个触发器trigger_student,当表test9_01中插入一行数据后,自动在表 pub.student_trigger中插入一行同样数据,其中列“type”值为“INSERT”;当test9_01删除一行数据后,自动在pub.student_trigger插入一行同样数据,其中列“type”值为“DELETE”。

4.在表test9_01中增加一行本人学号信息的数据,提交,查询pub.student_trigger中是否插入的响应的数据;如果成功插入且数据正确,说明触发器部分正确。
再删除这一行数据,查看pub.student_trigger是否正确。

5.如果创建的触发器无法正确形成响应数据,请删除触发器后重新建立。

6.执行“updatedbtestsettest=9”交实验,执行“select*fromdbscore”查询本次实验完成情况,如果有错误修正后,重新交实验。
实验十嵌入SQL/动态SQL(选作,不计成绩)
一、实验内容 编写程序实现本实验内容,编程工具可以powerbuilder、java、vc等。
开发一个客户端程序,连接数据库,给pub.test8_insert插入一行数据,立刻循环等待数据库后台系统给pub.test8_select插入数据,后台系统每5秒钟定时执行一次,会在1秒钟之内分组形成500个随机数(每组数据行数不固定,但是不会超过10行),且形成下一组数据的之前,自动删除上一租数据,客户端程序的就是要及时读取pub.test8_select中的数据,然后将读取到的数据写入pub.test8_update中。
实验的另外一个目的,学会如何与其他程序协同工作的技巧。

二、Pub用户相关视图说明
1.视图的权限视图TEST8_INSERTTEST8_SELECTTEST8_UPDATE 权限select,insert,deleteselect,deleteselect,update
2.视图的结构视图TEST8_INSERTTEST8_SELECT TEST8_UPDATE 列sidvarchar(12)namevarchar(10)sidvarchar(12)nonumeric(3)randomnumeric(10)sidvarchar(12)nonumeric(3)randomnumeric(10) 学号姓名学号序号随机数学号序号随机数 列说明
三、功能详细要求
1.向pub.test8_insert中插入本人学号、姓名。
实验平台系统检测到你插入test8_insert数据后,开始在pub.test8_select中分多组(每组数据行数不固定,但是不超过10行)插入500行学号是你本人的,序号从1到500的数据,每一组插入新的数据前,后台会先删除上一组的数据,整个过程不超过1秒钟。

2.客户在插入数据后立刻循环查询pub.test8_select中数据,将里面的数据读出来,根据序号将随机数写入视图pub.test8_update中。
读取到序号为501的数据后,结束循环。

3.由于实验平台系统是oracle系统系统内部程序,运行速度很快,产生每租数据前都会删除上一组插入的数据,这需要你的程序尽可能在没有删除前读出来,开发的客户端程序能够做到最少10行的随机数被复制到pub.test8_update中。

4.等写入超过10个数后,在oracle管理平台上执行“updatedbtestsettest=10”交实验,执行“select*fromdbscore”查询本次实验完成情况,如果有错误修正后,重新交本次实验。

5.每次开始进行运行测试时,都需要删除上次的数据,然后才能够进行下一次的测试。

6.系统流程简述:删除上次的数据、插入test8_insert数据、循环检测读取test8_select中数据直至遇 到序号为501结束,写入test8_update,如果正确读取写入超过10条,就可以交本次试验。

7.应用程序例子
四、后台系统工作流程图

标签: #学费 #文件 #网页模板 #软件 #店铺 #店铺 #cad #cad