《数据库原理》上机实验报告学号:姓名:班级:昆明理工大学信息工程与自动化学院2012年12月一、实验目的与要求:●熟练使用SQL定义子语言、操纵子语言命令语句●掌握关系模型上的完整性约束机制●掌握一定的数据库管理技术●能完成简单的数据库应用开发二、实验内容(一)数据定义子语言实验实验1利用SQL语句创建Employee数据库创建的代码为:CREATE DATABASE Employee实验2:利用SQL语句在Employee数据库中创建人员表person、月薪表salary 及部门表dept。
要求:按表1、表2、表3中的字段说明创建表1 person表结构字段名数据类型字段长度允许空否字段说明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) PRIMARY KEY NOT NULL,P_name Varchar(10) Not Null,Sex Char(2) Not Null,Birthdate Datetime,Prof Varchar(10),Deptno Char(4) Not Null,FOREIGN KEY (Deptno) REFERENCES dept(Deptno));表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 月份建立的代码:create table salary(P_no Char(6) PRIMARY KEY Not Null,Base Dec(5),Bonus Dec(5) CHECK (Bonus>50),Fact as Base+Bonus,Month Int Not Null,FOREIGN KEY (P_no) REFERENCES person(P_no));表3 dept表结构字段名数据类型字段长度允许空否字段说明Deptno Char 4 Not Null 部门代码,主键,Dname Varchar 10 Not Null 部门名称建立的代码:create table dept(Deptno Char(4) PRIMARY KEY Not Null,Dname Varchar(10) Not Null);(二)数据操纵子语言实验实验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 中级0001 000003 李浩然男1970-8-25 高级0002 000004 廖小玲女1979-8-6 初级0002 000005 梁玉琼女1970-8-25 中级0003 000006 罗向东男1979-5-11 初级0003 000007 肖家庆男1963-7-14 高级0003INSERT TNTO person(P_no,P_name,Sex,Birthdate,Prof,Deptno)V ALUES('000001','王云','男','1979-4-7','中级','0001');INSERT TNTO person(P_no,P_name,Sex,Birthdate,Prof,Deptno)V ALUES('000002','谢志文','男','1975-2-14','中级','0001');INSERT TNTO person(P_no,P_name,Sex,Birthdate,Prof,Deptno)V ALUES('000003','李浩然','男','1970-8-25','高级','0002');INSERT TNTO person(P_no,P_name,Sex,Birthdate,Prof,Deptno)V ALUES('000004','廖小玲','女','1979-8-6','初级','0002');INSERT TNTO person(P_no,P_name,Sex,Birthdate,Prof,Deptno)V ALUES('000005','梁玉琼','女','1970-8-25','中级','0003');INSERT TNTO person(P_no,P_name,Sex,Birthdate,Prof,Deptno)V ALUES('000006','罗向东','男','1979-5-11','初级','0003');INSERT TNTO person(P_no,P_name,Sex,Birthdate,Prof,Deptno)V ALUES('000007','肖家庆','男','1963-7-14','高级','0003');插入后查询结果为:表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 1INSERT TNTO salary(P_no,Base,Bonus,Month)V ALUES('000001','2100','300','1');INSERT TNTO salary(P_no,Base,Bonus,Month)V ALUES('000002','1800','300','1');INSERT TNTO salary(P_no,Base,Bonus,Month)V ALUES('000003','2800','280','1');INSERT TNTO salary(P_no,Base,Bonus,Month)V ALUES('000004','2500','250','1');INSERT TNTO salary(P_no,Base,Bonus,Month)V ALUES('000005','2300','275','1');INSERT TNTO salary(P_no,Base,Bonus,Month)V ALUES('000006','1750','130','1');INSERT TNTO salary(P_no,Base,Bonus,Month)V ALUES('000007','2400','210','1');插入后查询的结果为:表6 表dept中的数据DeptnoDname0001 人事部0002财务部0003 市场部插入代码:INSERT TNTO dept (Deptno, Dname)V ALUES('001','人事部');INSERT TNTO dept (Deptno, Dname)V ALUES('002','财务部');INSERT TNTO dept (Deptno, Dname)V ALUES('003','市场部');插入后得到结果:实验4:(1)利用SQL语句修改表中的数据。
要求:将salary表中工号为000006的员工工资增加为1800 元,奖金增加为160元。
修改的代码为:UPDA TE 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;查询结果为:(2)查询person表中职称为中级的所有员工数据。
查询代码:SELECT *FROM personWHERE prof='中级';查询结果为:(3)查询person表中具有高级职称的男员工信息。
查询代码:SELECT *FROM personWHERE prof='高级' AND Sex='男';查询结果为:(4)查询person表中姓名为王云、谢志文、罗向东的员工数据。