SQL-Server数据库上机实验报告《数据库系统原理》上机实验报告学号:***********名:***班级:07111301一、实验目的与要求:●熟练使用SQL语句●掌握关系模型上的完整性约束机制二、实验内容1:利用SQL语句创建Employee数据库CREATE DATABASE Employee;结果:2:利用SQL语句在Employee数据库中创建人员表person、月薪表salary及部门表dept。
做法:按表1、表2、表3中的字段说明创建表1 person表结构字段名数据类型字段长度允许空否字段说明P_no Char 6 NotNull工号,主键P_na Varch10 Not 姓名me ar NullSex Char 2 NotNull性别Birth date DatetimeNull 出生日期Prof Varchar10 Null 职称Dept no Char 4 NotNull部门代码,外键(参照dept表)表2 salary表结构字段名数据类型字段长度允许空否字段说明P_no Char 6 NotNull 工号,主键,外键(参照person表)Base Dec 5 Null 基本工资BonusDec 5 Null 奖金,要求>50 Fact Dec 5 Null 实发工资=基本工资+奖金Mont h Int 2 NotNull月份表3 dept表结构字段名数据类型字段长度允许空否字段说明Dept no Char 4 NotNull部门代码,主键,Dna me Varchar10 NotNull部门名称程序为:CREATE TABLE dept(deptno CHAR(4) PRIMARY KEY NOT NULL,dname V ARCHAR(10) NOT NULL)CREATE TABLE Person(P_no CHAR(6) PRIMARY KEY Not Null,P_name V ARCHAR(10) Not Null,Sex CHAR(2) Not Null,Birthdate Datetime Null,Prof V ARCHAR(10) Null,Deptno CHAR(4) Not Null,FOREIGN KEY(Deptno) REFERENCESdept(Deptno));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:利用SQL语句向表person、salary和dept中插入数据。
做法:按表4、表5、表6中的数据插入。
表4 表person中的数据P_no P_nam Sex BirthD Prof Deptne ate o 000001 王云男1973-4-中级00017000002 谢志文男1975-2-中级000114000003 李浩然男1970-8-高级000225000004 廖小玲女1979-8-初级00026000005 梁玉琼女1970-8-中级000325000006 罗向东男1979-5-初级000311000007 肖家庆男1963-7-高级000314表5 表salary中的数据P_no Base Bonus Fact S_month 000001 2100 300 1 000002 1800 300 1 000003 2800 280 1000004 2500 250 1 000005 2300 275 1 000006 1750 130 1 000007 2400 210 1表6 表dept中的数据Deptno Dname0001 人事部0002 财务部0003 市场部程序为:INSERT INTO dept(Deptno,Dname) values('0001','人事部');INSERT INTO dept(Deptno,Dname) values('0002','财务部');INSERT INTO dept(Deptno,Dname) values('0003','市场部');程序为:INSERT INTO person(P_no,P_name,Sex,Birthdate,Prof,Deptno )V ALUES('000001','王云','男','1979-4-7','中级','0001');INSERT INTO person(P_no,P_name,Sex,Birthdate,Prof,Deptno )V ALUES('000002','谢志文','男','1975-2-14','中级','0001');INSERT INTO person(P_no,P_name,Sex,Birthdate,Prof,Deptno )V ALUES('000003','李浩然','男','1970-8-25','高级','0002');INSERT INTO person(P_no,P_name,Sex,Birthdate,Prof,Deptno )V ALUES('000004','廖小玲','女','1979-8-6','初级','0002');INSERT INTOperson(P_no,P_name,Sex,Birthdate,Prof,Deptno )V ALUES('000005','梁玉琼','女','1970-8-25','中级','0003');INSERT INTO person(P_no,P_name,Sex,Birthdate,Prof,Deptno )V ALUES('000006','罗向东','男','1979-5-11','初级','0003');INSERT INTO person(P_no,P_name,Sex,Birthdate,Prof,Deptno )V ALUES('000007','肖家庆','男','1963-7-14','高级','0003');程序为:INSERT INTO salary(P_no,Base,Bonus,Month)V ALUES('000001','2100','300','1');INSERT INTO salary(P_no,Base,Bonus,Month) V ALUES('000002','1800','300','1');INSERT INTO salary(P_no,Base,Bonus,Month) V ALUES('000003','2800','280','1');INSERT INTO salary(P_no,Base,Bonus,Month) V ALUES('000004','2500','250','1');INSERT INTO salary(P_no,Base,Bonus,Month) V ALUES('000005','2300','275','1');INSERT INTO salary(P_no,Base,Bonus,Month) V ALUES('000006','1750','130','1');INSERT INTO salary(P_no,Base,Bonus,Month) V ALUES('000007','2400','210','1');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查询结果为:此处也可以看出“删除 person表中工号为000007的员工数据”这条命令没有成功,000007的信息还在。
5:条件查询做法:(1)查询person表中所有不重复的职称。
查询代码为:SELECT DISTINCT profFROM person;查询结果为:(2)查询person表中职称为中级的所有员工数据。
查询代码:SELECT *FROM personWHERE prof='中级';查询结果为:(3)查询person表中具有高级职称的男员工信息。
查询代码:SELECT *FROM personWHERE prof='高级' AND Sex='男';查询结果为:(4)查询person表中姓名为王云、谢志文、罗向东的员工数据。