数据库系统概论实验报告书.docx
《数据库系统概论实验报告书.docx》由会员分享,可在线阅读,更多相关《数据库系统概论实验报告书.docx(45页珍藏版)》请在冰豆网上搜索。
![数据库系统概论实验报告书.docx](https://file1.bdocx.com/fileroot1/2023-2/2/864d4c78-6bd4-4c2f-affc-e66536b625ae/864d4c78-6bd4-4c2f-affc-e66536b625ae1.gif)
数据库系统概论实验报告书
《数据库系统概论》
实验报告书
专业班级
网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: