1、数据库原理上机实验报告学 号:201210401212姓 名: 赵亚班 级: 自动化 122指导老师: 杨彪昆明理工大学信息工程与自动化学院2012 年 12 月1一、实验目的与要求: 熟练使用 SQL 定义子语言、操纵子语言命令语句 掌握关系模型上的完整性约束机制 掌握一定的数据库管理技术 能完成简单的数据库应用开发二、实验内容及学时安排(总学时:14)(一)数据定义子语言实验(2 学时)实验 1:利用 SQL 语句创建 Employee 数据库代码:create database employee;运行结果:实验 2:利用 SQL 语句在 Employee 数据库中创建人员表 person
2、、月薪表salary 及部门表 dept。要求:按表 1、表 2、表 3 中的字段说明创建表 1 person 表结构2字段名 数据类型 字段长度 允许空否 字段说明P_no Char 6 Not Null 工号,主键P_name Varchar 10 Not Null 姓名Sex Char 2 Not Null 性别Birthdate Datetime Null 出生日期Prof Varchar 10 Null 职称Deptno Char 4 Not Null 部门代码,外键(参照 dept 表)代码:create table person( P_no Char(6) Not Null pr
3、imary key,P_name Varchar(10) Not Null,Sex Char(2) Not Null,Birthdate Datetime Null,Prof Varchar(10) Null,Deptno Char(4) Not Null,Foreign key (Deptno) References dept(Deptno);create table salary(P_no Char(6) Not Null primary key,Base Dec(5) Null,Bonus Dec(5) Check (Bonus50) Null,Fact As Base+Bonus,Mo
4、n int,Foreign key (P_no) References person(P_no);create table dept(Deptno Char(4) Not Null primary key,Dname Varchar(10) Not Null,);3运行结果:表 2 salary 表结构字段名 数据类型 字段长度 允许空否 字段说明P_no Char 6 Not Null 工号,主键,外键(参照 person表)Base Dec 5 Null 基本工资Bonus Dec 5 Null 奖金,要求50Fact Dec 5 Null 实发工资=基本工资+奖金Month Int 2
5、Not Null 月份4表 3 dept 表结构字段名 数据类型 字段长度 允许空否 字段说明Deptno Char 4 Not Null 部门代码,主键,Dname Varchar 10 Not Null 部门名称(2)数据操纵子语言实验(6 学时)5实验 3:利用 SQL 语句向表 person、salary 和 dept 中插入数据。要求:按表 4、表 5、表 6 中的数据插入。代码:Person 表的数插入:insert into person(P_no,P_name,Sex,Birthdate,Prof,Deptno)values(000001,王云,男,1973-4-7,中级,00
6、01);insert into person(P_no,P_name,Sex,Birthdate,Prof,Deptno)values(000002,谢志文,男,1975-2-14,中级,0001);insert into person(P_no,P_name,Sex,Birthdate,Prof,Deptno)values(000003,李浩然,男,1970-8-25,中级,0001);insert into person(P_no,P_name,Sex,Birthdate,Prof,Deptno)values(000004,廖小玲,女,1979-8-6,高级,0002);insert in
7、to person(P_no,P_name,Sex,Birthdate,Prof,Deptno)values(000005,梁玉琼,女,1970-8-25,初级,0002);insert into person(P_no,P_name,Sex,Birthdate,Prof,Deptno)values(000006,罗向东,男,1979-5-11,初级,0003);insert into person(P_no,P_name,Sex,Birthdate,Prof,Deptno)values(000007,肖家庆,男,1963-7-14,高级,0003);6salary 表的数插入:insert
8、into salaryvalues(000001,2100,300,1);insert into salaryvalues(000002,1800,300,1);insert into salaryvalues(000003,2800,280,1);insert into salaryvalues(000004,2500,250,1);insert into salaryvalues(000005,2300,275,1);insert into salaryvalues(000006,1750,130,1);insert into salaryvalues(000007,2400,210,1)
9、;7dept 表的数插入:insert into dept(Deptno,Dname)values(0001,人事部);insert into dept(Deptno,Dname)values(0002,财务部);insert into dept(Deptno,Dname)values(0003,市场部);表 4 表 person 中的数据8P_no P_name Sex BirthDate Prof Deptno000001 王云 男 1973-4-7 中级 0001000002 谢志文 男 1975-2-14 中级 0001000003 李浩然 男 1970-8-25 高级 0002000
10、004 廖小玲 女 1979-8-6 初级 0002000005 梁玉琼 女 1970-8-25 中级 0003000006 罗向东 男 1979-5-11 初级 0003000007 肖家庆 男 1963-7-14 高级 0003表 5 表 salary 中的数据P_no Base Bonus Fact S_month000001 2100 300 1000002 1800 300 1000003 2800 280 1000004 2500 250 1000005 2300 275 1000006 1750 130 1000007 2400 210 1表 6 表 dept 中的数据Deptn
11、o Dname90001 人事部0002 财务部0003 市场部实验 4:(1)利用 SQL 语句修改表中的数据。要求:将 salary 表中工号为 000006 的员工工资增加为 1800 元,奖金增加为160 元。代码:update salaryset Base=1800,Bonus=160where P_no=000006;运行结果:10(2)利用 SQL 语句删除表中的数据。要求:删除 person 表中工号为 000007 的员工数据。代码:delete from person where P_no=000007;运行结果:(3)利用 SQL 语句查询 person 表中的所有数据。
12、代码:select * from person;运行结果:11实验 5:条件查询要求:(1)查询 person 表中所有不重复的职称。代码:select distinct Proffrom person;运行结果:12(2) 查询 person 表中职称为中级的所有员工数据。代码:select *from personwhere Prof=中级;运行结果:13(3) 查询 person 表中具有高级职称的男员工信息。代码:select *from personwhere Prof=中级 and Sex=男;运行结果:14(4) 查询 person 表中姓名为王云、谢志文、罗向东的员工数据。代码
13、如下:select *from personwhere P_name=王云 or P_name=谢志文 or P_name=罗向东;运行结果:15实验 6:使用 ORDER BY 排序要求:利用 SQL 语句将工号在 000003 和 000006 之间的员工的月收入按实发工资升序排序。代码如下:select *from salarywhere P_no000002 and P_no(select Fact from salarywhere P_no=000005);21(3) 数据完整性实验(1 学时)实验 13:测试对主表进行插入、更新及删除操作时的影响。 (请写明原因)要求:(1) 向表
14、 dept 中插入一行数据(0004 , 研发部 ) ,测试是否影响从表。代码:insert into dept(Deptno,Dname) values(0004,研发部);22运行结果:23(2) 将表 dept 中的部门号 0003 改为 0006,测试是否影响从表。代码:update dept set Deptno=0003where Deptno=0006;在将表 dept 中的部门号 0003 改为 0006 后,查找出从表的所有内容的运行结果为:24未受影响(3) 删除表 dept 中部门号为 0001 的员工的数据,测试是否影响从表。25原因: 未知。 。 。 。 。 。实验
15、14:测试对从表进行插入、更新及删除操作时的影响。 (请写明原因)要求:(1) 向表 person 中插入一行数据(000012 , 宋全礼 , 男 、 1980-7-17, 初级 , 0005) ,测试是否违背参照完整性。代码:insert into person(P_no,P_name,Sex,Birthdate,Prof,Deptno) values(000012,宋全礼,男,1980-7-17,初级,0005);运行结果:26结果分析:因为 person 表引用了 dept 表中的 deptno 一项,但是之前 dept 的deptno 并没有 0005 这一项,所以会显示错误。(2)
16、 删除表中工号为 000005 的员工数据,测试是否违背参照完整性。代码如下:delete from person where P_no=000005;运行结果:delete from person where P_no=000005;27原因: 未知。 。 。3总结体会通过这几次的数据库实验,使我对数据库的含义有了更深层次的理解,在这个信息化的时代,数据库无疑对于社会或生活来说是很重要的。其次也在这几次的实验之中,自己慢慢的熟悉了 spl 这个软件,渐渐的习惯了 spl 的语句。从一开始的无从下手,到现在的渐渐上手,期间失败了好多次,出现的错误主要是,一开始基本什么都不会,在建表的时候,由于相互的表之间有联系,所以创建表的先后顺序就显得很重要,得先创子表,后创主表。其次 insert 语句中也受表之间的联系,先得把子表的内容键入之后才能正常键入主表的数据,不然会发生数据冲突。这几次的实验让我受益匪浅,理论搭上实践,让我渐渐的喜欢数据库这门学科,不过还是在软件的使用过程中出现了一些自己不能解决的问题,如实验 13(3)和 14(2) 不过我还是会在之后的学习中继续努力。