1、数据库系统概论实验报告书数据库系统概论实验报告书专业班级网133学 号139074357姓 名赵世友指导教师 陈业斌 安徽工业大学计算机学院实验一:数据定义/数据操纵语言 实验日期 2015 年 10 月 13 日 实验目的 熟悉Oracle上机环境;熟练掌握和使用DDL语言,建立、修改和删除数据库表;熟练掌握和使用DML语言,对数据进行增加、修改和删除操作。 实验内容 1. SQL数据定义语句: 例1-1: (建立如附录一所示的四张数据表) 按要求建立教学数据库表结构及其完整性约束关系,并将数据分别插入到教学数据库的四个数据库表中。1.建立学生表。 例1-2: (修改表结构) 在Studen
2、t表中将SSEX字段修改为char(2),观察返回结果,分析原因。答: ssex改成char(2)后因为列长度问题,出现问题 如图 例1-3: (修改表结构) 在Student表中增加BirthDay(date) 字段。答:ALTER TABLE Student ADD BirthDay(date) varchar2(50) NULL 例1-4: (修改表结构) 在Student表中删除BirthDay字段。答:ALTER TABLEStudent DROP COLUMN BirthDay例1-5: (修改表结构) 在Student表中增加一个默认值约束,约束性别的默认值为男。答:ALTER
3、TABLE Student modify ssex char(3) DEFAULT (男) 2. SQL数据操纵语句: 例2-1: (插入数据) 执行如下语句向student表中插入一条数据。insert into student(sno,sname,sdept) values(96001,张三,SC)(1) 根据返回信息解释其原因;答:SCLASS char(2) not null,因为SCLASS不为空,所以插入时必要要给其赋值(2) 修改上面插入语句,让其能正确地插入一条记录。答:insert into student(sno,sname,sdept,sclass) values(960
4、01,张三,SC,01); 例2-2:(插入数据) 执行如下语句向Score表中插入一条数据。insert into Score values(96006,001,85)(1) 根据返回信息解释其原因;答:错误: ORA-02291: 违反完整约束条件 (SHIYAN1.FK_STUDENT_SCORE) - 未找到父项关键字 未找到9600602291. 00000 - integrity constraint (%s.%s) violated - parent key not found(2) 修改上面插入语句,让其能正确地插入一条记录。答:insert into Score values
5、(96005,001,85); 例2-3: (修改数据) 将Student表中所有学生的年龄加2。答:update STUDENT set SAGE= SAGE+2; 例2-4: (修改数据) 将Course表中程序设计课时数修改成50。答:update Course set CTIME=50 where CNAME=程序设计; 例2-5: (修改数据) 将Student表中的学号96001 改为96010,根据返回信息解释其原因。答:update STUDENT set SNO=96010 WHERE SNO=96001;SQL 错误: ORA-02292: 违反完整约束条件 (SHIYAN
6、1.FK_STUDENT_SCORE) - 已找到子记录因为数据表中主键96001作为外键在其他表中使用了,所以不能修改例2-6: (删除数据) 删除Student表中学号为96001的成绩信息,根据返回信息解释其原因。答:delete from STUDENT where Sno=96001;SQL 错误: ORA-02292: 违反完整约束条件 (SHIYAN1.FK_STUDENT_SCORE) - 已找到子记录要改的话,例2-7: (创建表) 利用Student表的查询结果创建Sc表,表中记录与Student表相同。答:create table SC as select * from
7、student 例2-8: (删除数据) 删除Sc表中性别为男的所有学生。答:delete from SC where SSEX=男;例2-9: (删除数据) 删除数据库表Sc中所有学生的数据。答:delete from SC; 例2-10: (删除表) 删除数据库表Sc。答:drop table SC; 实验要求 熟悉SQL Server上机环境; 建立数据库表,修改数据库表结构; 对数据库表进行插入、修改和删除数据的操作。 实验方法 执行SQL语句; 将实验需求用SQL语句表示; 查看执行结果,如果结果不正确,进行修改,直到正确为止。 实验总结 1 SQL语句以及执行结果; 对重点实验结果
8、进行分析; 实验中的问题和提高; 收获与体会。体会:通过这次实验,很好的理解陈老师上课时的内容,把所学的东西跟实际操作联系到了一起在实验中 遇到了很多错误,通过自己一步步调试解决了这些问题,进一步了解了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
9、 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 课程名称表 Course 3 教师授课表 Teach CNO(C,3) 课程号 CNAME(VC2,50) 课程名称CTIME(number(3) 学时数TNAME(VC2,20)教师姓名TSEX(C,3)性别CNO(C,3)课程号TDATE(Date)授课日期TDEPT(C,2
10、)系 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
11、,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 0
12、07 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)附录二: 数据库概论实验操作指导建立基本数据表的SQL1.建立学生表。create table Student( SNO char(5) primary key, SNAME varchar2(20) not null, SDEPT char(2
13、) not null, SCLASS char(2) not null, SSEX char(3), SAGE number(2,0);insert into Student values(96001,马小燕,CS,01,女,21);insert into Student values(96002,黎明,CS,01,男,18);insert into Student values(96003,刘东明,MA,01,男,18);insert into Student values(96004,赵志勇,IS,02,男,20);insert into Student values(97001,马蓉,M
14、A,02,女,19);insert into Student values(97002,李成功,CS,01,男,20);insert into Student values(97003,黎明,IS,03,女,19);insert into Student values(97004,李丽,CS,02,女,19);insert into Student values(96005,司马志明,CS,02,男,18); commit;2建立课程表create table Course(CNO char(3) primary key,CNAME varchar2(50),CTIME number(3,0)
15、;insert into COURSE values(001,数学分析,144);insert into COURSE values(002,普通物理,144);insert into COURSE values(003,微机原理,80);insert into COURSE values(004,数据结构,72);insert into COURSE values(005,操作系统,80);insert into COURSE values(006,数据库原理,80);insert into COURSE values(007,编译原理,60);insert into COURSE valu
16、es(008,程序设计,40);commit;3建立教师表create table Teach(TNAME VARCHAR2(20),TSEX CHAR(3),CNO CHAR(3),TDATE date,TDEPT CHAR(2),CONSTRAINT PK_STUDENT PRIMARY KEY(TNAME,CNO,TDEPT),CONSTRAINT FK_C_T FOREIGN KEY (CNO ) REFERENCES Course(CNO);insert into TEACH values(王成刚,男,004,9-5月-99,CS);insert into TEACH values(
17、李正科,男,003,09-5月-99,CS);insert into TEACH values(严敏,女,001,09-5月-99,MA);insert into TEACH values(赵高,男,004,09-5月-99,MA);insert into TEACH values(刘玉兰,女,006,23/2月/00,CS);insert into TEACH values(王成刚,男,004,23/2月/00,IS);insert into TEACH values(马悦,女,008,6/9月/00,CS);COMMIT;4建立成绩表create table Score (sno char
18、(5),cno char(3),Score number(4,1),CONSTRAINT PK_Score primary key(sno,cno),CONSTRAINT FK_Student_Score FOREIGN KEY (sno ) REFERENCES student(sno), CONSTRAINT FK_Sourse_Score FOREIGN KEY (cno) REFERENCES Course(cno);insert into Score values(96001,001,77.5);insert into Score values(96001,003,89);inser
19、t into Score values(96001,004,86);insert into Score values(96001,005,82);insert into Score values(96002,001,88);insert into Score values(96002,003,92.5);insert into Score values(96002,006,90);insert into Score values(96005,004,92);insert into Score values(96005,005,90);insert into Score values(96005
20、,006,89);insert into Score values(96005,007,78);insert into Score values(96003,001,69);insert into Score values(97001,001,96);insert into Score values(97001,008,95);insert into Score values(96004,001,87);insert into Score values(96003,003,91);insert into Score values(97002,003,91);insert into Score
21、values(97002,004, null);insert into Score values(97002,006,92);insert into Score values(97004,005,90);insert into Score values(97004,006,85);COMMIT;起草:陈业斌 审核: 日期:2014.9实验二:数据查询语言 实验日期 2015 年 10 月 22 日 实验目的 体会SQL语言数据查询功能的丰富和复杂。 实验内容 3 SQL数据查询语句: 例3-1: (选择表中的若干列) 求全体学生的学号、姓名、性别和年龄。select SNO,SNAME,SSE
22、X,SAGE from Student; 例3-2: (不选择重复行) 求选修了课程的学生学号。 select distint SNO from SCORE ; 例3-3: (选择表中的所有列) 求全体学生的详细信息。select * from Student; 例3-4: (使用表达式) 求全体学生的学号、姓名和出生年份。select SNO,SNAME , extract(year from sysdate)-sage from Student ; 例3-5: (使用列的别名) 求学生的学号和出生年份,显示时使用别名“学号”和“出生年份”。select SNO as 学号 from Stu
23、dent ; 例3-6: (比较大小条件) 求年龄大于19岁的学生的姓名和年龄。select sname,SAGE from Student where SAGE19; 例3-7: (比较大小条件) 求计算机系或信息系年龄大于18岁的学生的姓名、系和年龄。select sname,SDEPT,SAGE from Student whereSDEPT=CS or SDEPT=IS and sage18; 例3-8: (确定范围条件) 求年龄在19岁与22岁(含19岁和22岁)之间的学生的学号和年龄。select sno,SAGE from Student wheresage BETWEEN 19
24、 and 22; 例3-9: (确定范围条件) 求年龄不在19岁与22岁之间的学生的学号和年龄。 select sno,SAGE from Student wheresage not BETWEEN 19 and 22; 例3-10:(确定集合条件) 求在下列各系的学生信息:数学系和计算机系。 select * from Student where SDEPT in (MA,CS); 例3-11:(确定集合条件) 求不是数学系和计算机系的学生信息。 select * from Student where SDEPT not in (MA,CS); 例3-12:(匹配查询) 求姓名是以“李”打头
25、的学生。 select * from Student where SNAME like 李%; 例3-13:(匹配查询) 求姓名中含有“志”的学生。 select * from Student where SNAME like %志%; 例3-14:(匹配查询) 求姓名长度至少是三个汉字且倒数第三个汉字必须是“马”的学生。select * from Student where SNAME like %马_; 例3-15:(匹配查询) 求选修课程001或003,成绩在80至90之间,学号为96xxx的学生的学号、课程号和成绩。 select score.SNO,cno,score from SC
26、ORE ,Student where Student.SNO like 96_and cno in (001,003)and (score between 80 and 90); 例3-16:(涉及空值查询) 求缺少学习成绩的学生的学号和课程号。 select sno,cno from scorewhere score is null; 例3-17:(控制行的显示顺序) 求选修003课程学生的学号、课程号和分数,并按分数的降序进行排列。 select sno,cno,SCORE from scorewhere cno=003 order by score desc; 例3-18:(组函数) 求
27、学生总人数。select count(*)from STUDENT; 例3-19:(组函数) 求选修了课程的学生人数。 select count(distinct sno) from scorewhere CNO is not null; 例3-20:(组函数) 求计算机系学生的平均年龄。 select avg(sage)from STUDENt where sdept=CS; 例3-21:(组函数) 求选修了课程001的最高、最低与平均成绩。 select max(score), min(score), avg(score)from scorewhere cno=001; 例3-22:(分组
28、查询) 求各门课程的平均成绩与总成绩。select avg(score),sum(score) from scoregroup by cno; 例3-23:(分组查询) 求各系、各班级的人数和平均年龄。 select sdept,sclass ,avg(sage),count(sno) from studentgroup by sdept,sclass; 例3-24:(分组查询) 输入以下查询语句并执行,观察出现的其结果并分析其原因。 SELECT SNAME,SDEPT,COUNT(*)FROM STUDENT GROUP BY SDEPT;ORA-00979: 不是 GROUP BY 表达式00979. 00000 - not a GROUP BY expression*Cause: *Action:
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1