数据库系统概论实验报告书.docx

上传人:b****8 文档编号:9339173 上传时间:2023-02-04 格式:DOCX 页数:45 大小:1.07MB
下载 相关 举报
数据库系统概论实验报告书.docx_第1页
第1页 / 共45页
数据库系统概论实验报告书.docx_第2页
第2页 / 共45页
数据库系统概论实验报告书.docx_第3页
第3页 / 共45页
数据库系统概论实验报告书.docx_第4页
第4页 / 共45页
数据库系统概论实验报告书.docx_第5页
第5页 / 共45页
点击查看更多>>
下载资源
资源描述

数据库系统概论实验报告书.docx

《数据库系统概论实验报告书.docx》由会员分享,可在线阅读,更多相关《数据库系统概论实验报告书.docx(45页珍藏版)》请在冰豆网上搜索。

数据库系统概论实验报告书.docx

数据库系统概论实验报告书

《数据库系统概论》

实验报告书

 

专业班级

网133

学号

139074357

姓名

赵世友

指导教师

陈业斌

 

安徽工业大学计算机学院

实验一:

数据定义/数据操纵语言

[实验日期]2015年10月13日

[实验目的]

熟悉Oracle上机环境;熟练掌握和使用DDL语言,建立、修改和删除数据库表;熟练掌握和使用DML语言,对数据进行增加、修改和删除操作。

[实验内容]

1.SQL数据定义语句:

例1-1:

(建立如附录一所示的四张数据表)按要求建立教学数据库表结构及其完整性约束关系,并将数据分别插入到教学数据库的四个数据库表中。

1.建立学生表。

例1-2:

(修改表结构)在Student表中将SSEX字段修改为char

(2),观察返回结果,分析原因。

答:

ssex改成char

(2)后因为列长度问题,出现问题如图

例1-3:

(修改表结构)在Student表中增加BirthDay(date)字段。

答:

ALTERTABLEStudent

ADDBirthDay(date)varchar2(50)NULL

例1-4:

(修改表结构)在Student表中删除BirthDay字段。

答:

ALTERTABLEStudent

DROPCOLUMNBirthDay

例1-5:

(修改表结构)在Student表中增加一个默认值约束,约束’性别’的默认值为’男’。

答:

ALTERTABLEStudentmodifyssexchar(3)DEFAULT('男')

 

2.SQL数据操纵语句:

例2-1:

(插入数据)执行如下语句向student表中插入一条数据。

insertintostudent(sno,sname,sdept)values('96001','张三','SC')

(1)根据

返回信息解释其原因;

答:

SCLASSchar

(2)notnull,因为SCLASS不为空,所以插入时必要要给其赋值

(2)修改上面插入语句,让其能正确地插入一条记录。

答:

insertintostudent(sno,sname,sdept,sclass)values('96001','张三','SC',’01’);

例2-2:

(插入数据)执行如下语句向Score表中插入一条数据。

insertintoScorevalues('96006','001',85)

(1)根据返回信息解释其原因;

答:

错误:

ORA-02291:

违反完整约束条件(SHIYAN1.FK_STUDENT_SCORE)-未找到父项关键字未找到96006

02291.00000-"integrityconstraint(%s.%s)violated-parentkeynotfound"

(2)修改上面插入语句,让其能正确地插入一条记录。

答:

insertintoScorevalues('96005','001',85);

例2-3:

(修改数据)将Student表中所有学生的年龄加2。

答:

updateSTUDENTsetSAGE=SAGE+2;

例2-4:

(修改数据)将Course表中‘程序设计’课时数修改成50。

答:

updateCoursesetCTIME=50whereCNAME='程序设计';

例2-5:

(修改数据)将Student表中的学号’96001’改为‘96010’,根据返回信息解释其原因。

答:

updateSTUDENTsetSNO=96010WHERESNO=96001;

SQL错误:

ORA-02292:

违反完整约束条件(SHIYAN1.FK_STUDENT_SCORE)-已找到子记录

因为数据表中主键96001作为外键在其他表中使用了,所以不能修改

例2-6:

(删除数据)删除Student表中学号为‘96001’的成绩信息,根据返回信息解释其原因。

答:

deletefromSTUDENTwhereSno=96001;

SQL错误:

ORA-02292:

违反完整约束条件(SHIYAN1.FK_STUDENT_SCORE)-已找到子记录

要改的话,

例2-7:

(创建表)利用Student表的查询结果创建Sc表,表中记录与Student表相同。

答:

createtableSCasselect*fromstudent

 

例2-8:

(删除数据)删除Sc表中性别为’男’的所有学生。

答:

deletefromSCwhereSSEX='男';;

例2-9:

(删除数据)删除数据库表Sc中所有学生的数据。

答:

deletefromSC;

例2-10:

(删除表)删除数据库表Sc。

答:

droptableSC;

[实验要求]

①熟悉SQLServer上机环境;

②建立数据库表,修改数据库表结构;

③对数据库表进行插入、修改和删除数据的操作。

[实验方法]

①执行SQL语句;

②将实验需求用SQL语句表示;

③查看执行结果,如果结果不正确,进行修改,直到正确为止

[实验总结]

1SQL语句以及执行结果;

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

③实验中的问题和提高;

④收获与体会。

体会:

通过这次实验,很好的理解陈老师上课时的内容,把所学的东西跟实际操作联系到了一起

在实验中遇到了很多错误,通过自己一步步调试解决了这些问题,进一步了解了sql语言学习方法。

附录一.教学管理数据库设计

各表的数据结构和数据如下:

1.学生情况表Student

SNO(C,5)

SNAME(VC2,20)

姓名

SDEPT(C,2)

SCLASS(C,2)

班级

SSEX(C,3)

性别

SAGE(number(2,0))

年龄

96001

马小燕

CS

01

21

96002

黎明

CS

01

18

96003

刘东明

MA

01

18

96004

赵志勇

IS

02

20

97001

马蓉

MA

02

19

97002

李成功

CS

01

20

97003

黎明

IS

03

19

97004

李丽

CS

02

19

96005

司马志明

CS

02

18

主关键字:

SNO非空字段:

SNAME,SDEPT,SCLASS

2.课程名称表Course3.教师授课表Teach

CNO(C,3)

课程号

CNAME(VC2,50)

课程名称

CTIME(number(3))

学时数

TNAME(VC2,20)

教师姓名

TSEX(C,3)

性别

CNO(C,3)

课程号

TDATE(Date)

授课日期

TDEPT(C,2)

001

数学分析

144

王成刚

004

1999.9.5

CS

002

普通物理

144

李正科

003

1999.9.5

CS

003

微机原理

80

严敏

001

1999.9.5

MA

004

数据结构

72

赵高

004

1999.9.5

IS

005

操作系统

80

李正科

003

2000.2.23

MA

006

数据库原理

80

刘玉兰

006

2000.2.23

CS

007

编译原理

60

王成刚

004

2000.2.23

IS

008

程序设计

40

马悦

008

2000.9.6

CS

主关键字:

CNO候选关键字:

CNAME主关键字:

TNAME,CNO,TDEPT参照关系:

Course(CNO)

4.成绩表Score

SNO(C,5)

学号

CNO(C,3)

课程号

SCORE(number(4,1))

分数

SNO(C,5)

学号

CNO(C,3)

课程号

SCORE(number(4,1))

分数

SNO(C,5)

学号

CNO(C,3)

课程号

SCORE(number(4,1))

分数

96001

001

77.5

96005

004

92

96004

001

87

96001

003

89

96005

005

90

96003

003

91

96001

004

86

96005

006

89

97002

003

91

96001

005

82

96005

007

76

97002

004

96002

001

88

96003

001

69

97002

006

92

96002

003

92.5

97001

001

96

97004

005

90

96002

006

90

97001

008

95

97004

006

85

主关键字:

SNO,CNO参照关系:

Student(SNO),Course(CNO)

附录二:

《数据库概论》实验操作指导

建立基本数据表的SQL

1.建立学生表。

createtableStudent

(SNOchar(5)primarykey,

SNAMEvarchar2(20)notnull,

SDEPTchar

(2)notnull,

SCLASSchar

(2)notnull,

SSEXchar(3),

SAGEnumber(2,0)

);

insertintoStudentvalues('96001','马小燕','CS','01','女',21);

insertintoStudentvalues('96002','黎明','CS','01','男',18);

insertintoStudentvalues('96003','刘东明','MA','01','男',18);

insertintoStudentvalues('96004','赵志勇','IS','02','男',20);

insertintoStudentvalues('97001','马蓉','MA','02','女',19);

insertintoStudentvalues('97002','李成功','CS','01','男',20);

insertintoStudentvalues('97003','黎明','IS','03','女',19);

insertintoStudentvalues('97004','李丽','CS','02','女',19);

insertintoStudentvalues('96005','司马志明','CS','02','男',18);

commit;

2.建立课程表

createtableCourse

(CNOchar(3)primarykey,

CNAMEvarchar2(50),

CTIMEnumber(3,0)

);

insertintoCOURSEvalues('001','数学分析',144);

insertintoCOURSEvalues('002','普通物理',144);

insertintoCOURSEvalues('003','微机原理',80);

insertintoCOURSEvalues('004','数据结构',72);

insertintoCOURSEvalues('005','操作系统',80);

insertintoCOURSEvalues('006','数据库原理',80);

insertintoCOURSEvalues('007','编译原理',60);

insertintoCOURSEvalues('008','程序设计',40);

commit;

3.建立教师表

createtableTeach

(TNAMEVARCHAR2(20),

TSEXCHAR(3),

CNOCHAR(3),

TDATEdate,

TDEPTCHAR

(2),

CONSTRAINTPK_STUDENTPRIMARYKEY(TNAME,CNO,TDEPT),

CONSTRAINTFK_C_TFOREIGNKEY(CNO)REFERENCESCourse(CNO)

);

insertintoTEACHvalues('王成刚','男','004','9-5月-99','CS');

insertintoTEACHvalues('李正科','男','003','09-5月-99','CS');

insertintoTEACHvalues('严敏','女','001','09-5月-99','MA');

insertintoTEACHvalues('赵高','男','004','09-5月-99','MA');

insertintoTEACHvalues('刘玉兰','女','006','23/2月/00','CS');

insertintoTEACHvalues('王成刚','男','004','23/2月/00','IS');

insertintoTEACHvalues('马悦','女','008','6/9月/00','CS');

COMMIT;

4.建立成绩表

createtableScore

(snochar(5),

cnochar(3),

Scorenumber(4,1),

CONSTRAINTPK_Scoreprimarykey(sno,cno),

CONSTRAINTFK_Student_ScoreFOREIGNKEY(sno)REFERENCESstudent(sno),

CONSTRAINTFK_Sourse_ScoreFOREIGNKEY(cno)REFERENCESCourse(cno)

);

insertintoScorevalues('96001','001',77.5);

insertintoScorevalues('96001','003',89);

insertintoScorevalues('96001','004',86);

insertintoScorevalues('96001','005',82);

insertintoScorevalues('96002','001',88);

insertintoScorevalues('96002','003',92.5);

insertintoScorevalues('96002','006',90);

insertintoScorevalues('96005','004',92);

insertintoScorevalues('96005','005',90);

insertintoScorevalues('96005','006',89);

insertintoScorevalues('96005','007',78);

insertintoScorevalues('96003','001',69);

insertintoScorevalues('97001','001',96);

insertintoScorevalues('97001','008',95);

insertintoScorevalues('96004','001',87);

insertintoScorevalues('96003','003',91);

insertintoScorevalues('97002','003',91);

insertintoScorevalues('97002','004',null);

insertintoScorevalues('97002','006',92);

insertintoScorevalues('97004','005',90);

insertintoScorevalues('97004','006',85);

COMMIT;

 

起草:

陈业斌审核:

日期:

2014.9

 

实验二:

数据查询语言

[实验日期]2015年10月22日

[实验目的]

体会SQL语言数据查询功能的丰富和复杂。

[实验内容]

3.SQL数据查询语句:

例3-1:

(选择表中的若干列)求全体学生的学号、姓名、性别和年龄。

selectSNO,SNAME,SSEX,SAGEfromStudent;

例3-2:

(不选择重复行)求选修了课程的学生学号。

selectdistintSNOfromSCORE;

例3-3:

(选择表中的所有列)求全体学生的详细信息。

select*fromStudent;

例3-4:

(使用表达式)求全体学生的学号、姓名和出生年份。

selectSNO,SNAME,extract(yearfromsysdate)-sagefromStudent;

例3-5:

(使用列的别名)求学生的学号和出生年份,显示时使用别名“学号”和“出生年份”。

selectSNOas"学号"fromStudent;

例3-6:

(比较大小条件)求年龄大于19岁的学生的姓名和年龄。

selectsname,SAGEfromStudentwhereSAGE>19;

例3-7:

(比较大小条件)求计算机系或信息系年龄大于18岁的学生的姓名、系和年龄。

selectsname,SDEPT,SAGEfromStudentwhere

SDEPT='CS'orSDEPT='IS'andsage>18;

例3-8:

(确定范围条件)求年龄在19岁与22岁(含19岁和22岁)之间的学生的学号和年龄。

selectsno,SAGEfromStudentwhere

sageBETWEEN19and22;

例3-9:

(确定范围条件)求年龄不在19岁与22岁之间的学生的学号和年龄。

selectsno,SAGEfromStudentwhere

sagenotBETWEEN19and22;

例3-10:

(确定集合条件)求在下列各系的学生信息:

数学系和计算机系。

select*fromStudentwhereSDEPTin('MA','CS');

例3-11:

(确定集合条件)求不是数学系和计算机系的学生信息。

select*fromStudentwhereSDEPTnotin('MA','CS');

例3-12:

(匹配查询)求姓名是以“李”打头的学生。

select*fromStudentwhereSNAMElike'李%';

例3-13:

(匹配查询)求姓名中含有“志”的学生。

select*fromStudentwhereSNAMElike'%志%';

例3-14:

(匹配查询)求姓名长度至少是三个汉字且倒数第三个汉字必须是“马”的学生。

select*fromStudentwhereSNAMElike'%马__';

例3-15:

(匹配查询)求选修课程001或003,成绩在80至90之间,学号为96xxx的学生的学号、课程号和成绩。

selectscore.SNO,cno,scorefromSCORE,Student

whereStudent.SNOlike'96___'

andcnoin('001','003')

and(scorebetween80and90);

例3-16:

(涉及空值查询)求缺少学习成绩的学生的学号和课程号。

selectsno,cnofromscore

wherescoreisnull;

例3-17:

(控制行的显示顺序)求选修003课程学生的学号、课程号和分数,并按分数的降序进行排列。

selectsno,cno,SCOREfromscore

wherecno=003orderbyscoredesc;

例3-18:

(组函数)求学生总人数。

selectcount(*)fromSTUDENT;

例3-19:

(组函数)求选修了课程的学生人数。

selectcount(distinctsno)fromscore

whereCNOisnotnull;

例3-20:

(组函数)求计算机系学生的平均年龄。

selectavg(sage)fromSTUDENtwheresdept='CS';

例3-21:

(组函数)求选修了课程001的最高、最低与平均成绩。

selectmax(score),min(score),avg(score)fromscore

wherecno='001';

例3-22:

(分组查询)求各门课程的平均成绩与总成绩。

selectavg(score),sum(score)fromscore

groupbycno;

例3-23:

(分组查询)求各系、各班级的人数和平均年龄。

selectsdept,sclass,avg(sage),count(sno)fromstudent

groupbysdept,sclass;

例3-24:

(分组查询)输入以下查询语句并执行,观察出现的其结果并分析其原因。

SELECTSNAME,SDEPT,COUNT(*)FROMSTUDENTGROUPBYSDEPT;

ORA-00979:

不是GROUPBY表达式

00979.00000-"notaGROUPBYexpression"

*Cause:

*Action:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1