《数据库原理》上机实验报告专业:自动化、测控学号:姓名:班级:指导老师:杨彪昆明理工大学信息工程与自动化学院2014年12月一、实验目的与要求:●熟练使用SQL定义子语言、操纵子语言命令语句●掌握关系模型上的完整性约束机制●掌握一定的数据库管理技术●能完成简单的数据库应用开发二、实验内容及学时安排(总学时:8)(一)数据定义子语言实验(2学时)实验1:利用SQL语句创建Employee数据库程序:create database employee结果:实验2:利用SQL语句在Employee数据库中创建人员表person、月薪表salary 及部门表dept。
要求:按表1、表达、表3中的字段说明创建表1 person表结构字段名数据类型字段长度允许空否字段说明P_no Char 6 Not Null 工号,主键P_name Varchar 10 Not Null 姓名Sex Char 2 Not Null 性别Birthdate Datetime 8 Null 出生日期Prof Varchar 10 Null 职称Deptno Char 4 Not Null 部门代码,外键(参照dept表)表2 salary表结构字段名数据类型字段长度允许空否字段说明P_no Char 6 Not Null 工号,主键,外键(参照person表)Base Dec 5 Null 基本工资Bonus Dec 5 Null 奖金,要求>50Fact Dec 5 Null 实发工资=基本工资+奖金Month Int 2 Not Null 月份表3 dept表结构字段名数据类型字段长度允许空否字段说明Deptno Char 4 Not Null 部门代码,主键,Dname Varchar 10 Not Null 部门名称程序:create table dept(Deptno char(4)not null,Dname varchar(10)not null,)create table person(P_no char(6)not null primary key,P_name varchar(10)not null,Sex Char(10)not null,Birthdate date 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)null,Fact Dec(5)null,Month Int not null,Foreign key (P_no)References person(P_no))结果:(二)数据操纵子语言实验(4学时)实验3:利用SQL语句向表person、salary和dept中插入数据。
要求:按表4、表5、表6中的数据插入。
表4 表person中的数据P_no P_name Sex BirthDate Prof Deptno 000001 王云男1973-4-7 中级0001 000002 谢志文男1975-2-14 中级0001000003 李浩然男1970-8-25 高级0002 000004 廖小玲女1979-8-6 初级0002 000005 梁玉琼女1970-8-25 中级0003 000006 罗向东男1979-5-11 初级0003 000007 肖家庆男1963-7-14 高级0003 程序:insert into person(P_no,P_name,Sex,Birthdate,Prof,Deptno)values('000001','王云','男','1973-4-7','中级','0001')其他person表的数据插入同上。
结果:表5 表salary中的数据P_no Base Bonus Fact S_month 000001 2100 300 1 000002 1800 300 1 000003 2800 280 1 000004 2500 250 1 000005 2300 275 1 000006 1750 130 1 000007 2400 210 1程序:insert into salaryvalues ('000001','2100','300','2400','1')其他salary表的数据插入同上。
结果:表6 表dept中的数据Deptno Dname0001 人事部0002 财务部0003 市场部程序:insert into deptvalues ('0001','人事部')其他dept表的数据插入同上。
结果:实验4:(1)利用SQL语句修改表中的数据。
要求:将salary表中工号为000006的员工工资增加为1800元,奖金增加为160元。
程序:update salaryset Base=1800,Bonus=160where P_no=000006结果:(2)利用SQL语句删除表中的数据。
要求:删除person表中工号为000007的员工数据。
程序:deletefrom personwhere P_no=000007结果:(3)利用SQL语句查询person表中的所有数据。
程序:select *from person结果:实验5:条件查询要求:(1)查询person表中所有不重复的职称。
程序:select distinct proffrom person结果:查询p erson表中职称为中级的所有员工数据。
程序:select *from personwhere Prof='中级'结果:(2)查询person表中具有高级职称的男员工信息。
程序:select *from personwhere Prof='高级'and sex='男'结果:(3)查询person表中姓名为王云、谢志文、罗向东的员工数据。
程序:select *from personwhere p_name='王云'or p_name='谢志文'or p_name='罗向东'结果:实验6:使用ORDER BY排序要求:利用SQL语句将工号在000003和000006之间的员工的月收入按实发工资升序排序。
程序及结果如下:实验7:利用SQL语句查询各部门的实发工资总数。
程序及结果如下:实验8:利用SQL语句查询人事部所有员工信息。
程序:select*from personwhere deptno=0001结果:实验9:表的内连接查询:要求:利用SQL语句查询person表中职称为中级的员工信息。
程序及结果如下:实验10:表的外连接查询:要求:利用SQL语句查询每个员工1 月份的工资和奖金程序及结果如下:实验11:子查询:要求:利用SQL语句查询比工号为000005的员工实发工资高的所有员工信息。
程序及结果如下:(三)数据完整性实验(1学时)实验12:定义外键约束要求:(1)创建表时将person表的deptno列定义为外键,并参考dept表的列deptno。
程序:create table person(P_no char(6)not null primary key,P_name varchar(10)not null,Sex Char(10)not null,Birthdate date null,Prof varchar(10)null,Deptno char(4)not null,Foreign key (Deptno)References dept(Deptno))(2)将salary表中的P_no设为外键,并使其参照person表中的列P_no。
程序:create table salary(P_no char(6)not null primary key,Base Dec(5)null,Bonus Dec(5)null,Fact Dec(5)null,Month Int not null,Foreign key (P_no)References person(P_no))其依赖关系为实验13:测试对主表进行插入、更新及删除操作时的影响。
(请写明原因)要求:(1)向表dept中插入一行数据(‘0004’,‘研发部’),测试是否影响从表。
程序:insert into dept(Deptno,Dname)values('0004','研发部')结果:dept表的结果为Person表的结果为:Salary表的结果为故向表dept中插入一行数据(‘0004’,‘研发部’),并未影响从表。
原因是因为person表参照的是dept表,salary表参照的是person表,并且person 表和salary表中均没有与新插入数据有关联的数据,所以,当dept表插入新数据时,person表和salary表的数据不会发生改变。
(2)将表dept中的部门号0003改为0006,测试是否影响从表。
程序:update deptset Deptno='0006'where Deptno='0003'结果:故将表dept中的部门号0003改为0006,会影响到从表。
原因是各表之间已经建立联系,person表参照的是dept表, person表中已有Deptno='0003'的数据,当dept表中的Deptno='0003'数据发生改变时,person表中数据也会发生改变,由于有约束,所以限制了程序的执行。
(3)删除表dept中部门号为0001的员工的数据,测试是否影响从表。
程序:deletefrom deptwhere deptno='0001'结果:故删除表dept中部门号为0001的员工的数据,会影响到从表。
原因是各表之间已经建立了联系,person表参照的是dept表,且person表中已有deptno=‘0001’的数据,当dept表中deptno=‘0001’的数据发生改变时,person表中数据势必会发生改变。
由于有约束,所以限制了程序的执行。