Oracle实验报告Word文档格式.docx
《Oracle实验报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《Oracle实验报告Word文档格式.docx(13页珍藏版)》请在冰豆网上搜索。
返回某门课学生的平均成绩(该课名称由参数传递)
11.设计过程显示某位教师所教的学生(该教师名通过参数进行传递)。
一、实验目的及要求
熟悉ORACLE的环境
二、所用仪器、设备
PC机和oracle编译软件
三、实验方法与步骤
用户管理:
创建用户和用户授权:
createuserliyun1identifiedbyliyun1;
grantsysdbatoliyun1;
grantcreatesessiontoliyun1;
创建表:
1.创建教师表:
在教师表中,教师的tno号是唯一确定一位教师的,因此在表中设置为主键。
教师表中包含教师的一些基本信息,教师号,教师名字,教师年龄,教师性别。
createtableteacher
(
tnovarchar2(20)primarykey,
tnamevarchar2(20)notnull,
tagevarchar2(10),
tsexvarchar2(5)check(tsexin('
男'
'
女'
))
);
插入教师数据:
insertintoteachervalues('
95001'
海丰'
35'
95002'
巩燕'
32'
95003'
王涛'
41'
95004'
秦始皇'
'
95005'
冯艳艳'
40'
95006'
胖大海'
39'
95007'
王晓楠'
48'
95008'
李大钊'
51'
95009'
张柏芝'
95010'
林志玲'
37'
2.创建学生表
学生表中的学生号也是唯一选定一位学生的,因此也将学生号设置成为主键,该学生表中有学生号,学生姓名,学生年龄,学生性别属性。
createtablestudent(
snovarchar(20)primarykey,
snamevarchar(20)notnull,
sagevarchar(10),
ssexvarchar(5)check(ssexin('
))
插入学生数据:
insertintostudentvalues('
10001'
李小龙'
22'
10002'
曾志伟'
23'
10003'
科比'
21'
10004'
李宁'
10005'
司马光'
24'
10006'
钱多'
20'
10007'
黄飞鸿'
10008'
神马'
10009'
送高祖'
10010'
周杰伦'
25'
10011'
小小'
10012'
娜迦'
3.创建课程表:
课程表中课程号唯一确定课程,设置为主键,课程表中有课程的号码,课程的名字,课程的上课时间和上课地点。
createtablecourse(
cnovarchar(20)primarykey,
cnamevarchar(20)notnull,
ctimevarchar(10),
cplacevarchar(50)
插入课程数据:
insertintocoursevalues('
50001'
数据库管理'
教3_301'
50002'
面向对象设计'
教3_211'
50003'
人工智能'
教4_311'
50004'
计算机英语'
44'
教4_313'
50005'
软件工程'
13'
教3_305'
50006'
跆拳道'
11'
体育馆'
50007'
古希腊文化'
54'
教3_321'
50008'
中国历史'
52'
教3_101'
50009'
舞蹈'
34'
音乐管'
50010'
音乐'
31'
音乐馆'
50011'
c++'
教3_205'
50012'
sql语言'
14'
教3_102'
50013'
网页设计'
教3_106'
4.创建关系表:
在关系表中设置的是以上三个表的关系,在关系表中学生号,教师号,课程号,都设置为外键,以用来连接几个表。
同时关系表中还有学生的课程成绩。
createtablesele(
snovarchar(20),
cnovarchar(20),
tnovarchar2(20),
gradeint,
foreignkey(sno)referencesstudent(sno),
foreignkey(cno)referencescourse(cno),
foreignkey(tno)referencesteacher(tno)
插入关系数据:
insertintoselevalues('
80'
58'
89'
100'
95'
83'
76'
66'
57'
59'
75'
72'
91'
88'
93'
92'
77'
82'
78'
对库进行一些关系查询:
1.用SQL语句查询至少教两门课的教师信息;
查询至少教两门课的教师信息:
select*fromteacher
wheretnoin(
selecttnofromsele
groupbytno
havingcount(distinct(cno))>
=2);
查询某个学生信息:
selectsname,sage,sno,&
&
temp
fromstudentwheresno=&
temp;
2.显示所有教师的信息:
Setserveroutputon
Declare
cursormy_cursoris
select*fromteacher;
Begin
forcurrent_cursorinmy_cursor
loop
dbms_output.put_line('
教师号:
||current_cursor.tno);
教师姓名:
||current_cursor.tname);
教师年龄:
||current_cursor.tage);
教师性别:
||current_cursor.tsex);
endloop;
End;
/
3.过程实现如下功能:
createorreplaceproceduresearch_avg(in_conino%type)
as
out_gradeint;
selectavg(grade)intoout_grade
fromsele,course
whereo=oandcname=in_con;
dbms_output.put_line('
学生平均成绩:
||out_grade);
Endsearch_avg;
调用过程:
executesearch_avg('
4.设计过程显示某位教师所教的学生(该教师名通过参数进行传递)。
createorreplaceproceduremyserach(preinnumber)
selectsno,sname,sage,ssexfromstudentwheresnoin(selectsnofromselewheretno=pre);
学生号:
||current_cursor.sno);
学生姓名:
||current_cursor.sname);
学生年龄:
||current_cursor.sage);
学生性别:
||current_cursor.ssex);
Endmyserach;
executemyserach('
删除过程:
dropproceduremyserach;
四、实验结果与数据处理
用户创建和授权:
教师表:
学生表:
课程表(一部分):
关系表:
查询至少教两门课的教师信息
显示所有教师信息(一部分):
用临时变量查询某个学生信息:
返回某门课学生的平均成绩:
显示某位教师所教的学生:
五、讨论与结论.
通过这次对学生选课数据库的设计,以及对数据库的安装和配置,我对oracle有了更深的理解。
对于oracle的配置也有了了解。
学习到了如何在数据库中管理表对象,管理表中的数据以及根据系统业务规则处理表中的数据。
在以后的学习中应当更加努力。