2013级数据库原理实验报告专业:_______计算机___班级:________________学号:______________姓名:_______________2015年5月实验一 SQL Server 2005基本操作一、实验目的了解SQL Server 2005组件;了解SQL Server数据库组成;掌握SQL Server 2005界面基本操作。
二、实验内容(1)开始->程序->Microsoft SQL Server 2005-> SQL Server Management Studio,打开后进入到SQL Server 2005主体界面(2)点击‚数据库‛前面的‚+‛,可以展开查看数据库,并且可以继续展开下级目录,查看数据库中的表、视图等。
(3)了解SQL Server 2005菜单栏的一些主要工具的使用。
(4)学生动手操作SQL Server 2005,打开数据库,打开表,打开查询界面;查看数据库的属性、表的属性等。
三、实验总结进行这次实验有遇到什么问题?怎么解决的?答:此次实验我们一步一步按照实验内容操作的,基本上没有遇到问题。
实验二数据定义一、实验目的掌握SQL Server 2005的数据库创建;掌握SQL Server数据定义语言;掌握SQL Server 2005数据定义的SQL语言定义与管理器定义两种方式。
二、实验内容(1)创建、修改、删除数据库。
创建要求:数据库Employee中包含一个数据库文件Empdat1.mdf和一个日志文件Emplog.ldf。
其中,数据文件大小为10MB,最大为50MB,以5MB速度增长;日志文件大小为5MB,最大为25MB,以5%速度增长。
修改要求:增加第二个数据库文件Empdat2.ndf,其中,数据文件大小为5MB,最大为25MB,以2MB速度增长。
(2)利用SQL创建人员表person、月薪表salary及部门表dept。
见上页图要求:按表2-1、表2-2及表2-3中的字段说明创建。
表2-3 dept表结构create table dept(Deptno Char(4)Not Null,primary key(Deptno),Dname Varchar(10)Not Null,)create table person(P_no Char(6)Not Null,primary key(P_no),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,foreign key(P_no)references person(P_no),Base Dec(5)Null,Bonus Dec(5)Null,Fact as Base+Bonus,Month Int Not Null,check(Bonus>50),)(3)利用SQL语句创建视图。
要求:在基表person上创建员工视图PersonView,其中包含工号、姓名、性别、职称和部门代码等字段。
create view PersonView (P_no,P_name,Sex,Prof,Deptno)asselect P_n,P_name,Sex,Prof,Deptnofrom person(4)创建索引。
要求:①在人员表的姓名列上创建一个单列索引name_sortcreate index name_sorton person(P_name);②在人员表的出生日期列和姓名列上创建一个组合索引birth_namecreate clustered index birth_nameon person(BirthDate,P_name);③在人员表的姓名列上创建一个唯一索引u_name_sortcreate unique index u_name_sorton person(P_name);④创建月薪表上基于fact的索引fact_idxcreate index fact_idxon salary(fact);(5)删除索引。
要求:删除月薪表上的索引fact_idxdrop index salary.fact_idx;三、实验总结1.在表的创建的时候要注意什么问题?答:完整性约束语的应用语法,表间关系,和建立顺序。
2.自己在这次实验中遇到什么问题?怎么解决的?答:视图和索引的标点要不要加的问题。
多尝试找到正确的。
实验三数据操作一、实验目的掌握SQL Server的数据操作语言;掌握SQL Server数据操作的管理器处理方式;掌握SQL Server 2005定义视图语言。
二、实验内容(1)利用SQL语句向表person、salary和dept中插入数据。
要求:按表3-1、表3-2及表3-3中的数据插入。
insertinto dept (Deptno,Dname)values('0001','人事部')insertinto person (P_no,P_name,Sex,BirthDate,Prof,Deptno)values('000001','王云','男',1973-4-7,'中级','0001')insertinto salary (P_no,Base,Bonus,Month)values('000001',2100,300,1)(2)用SQL语句修改表中的数据。
要求:将salary表中工号为000006的员工工资增加为1800,奖金增加为160。
update salaryset Base=1800,Bonus=160where P_no='000006'(3)用SQL语句删除表中的数据。
要求:删除person表中工号为000010的员工数据deletefrom salarywhere P_no='0000010'deletefrom personwhere P_no='0000010'(4)更新视图。
要求:将员工视图PersonView中姓名为王云的员工职称改为高级。
update PersonViewset Prof='高级'where P_name='王云'(5)向视图插入数据。
要求:向视图PersonView中插入一行数据(‘000011’,‘刘美萍’,‘女’,‘中级’,‘0002’)。
insertinto PersonView (P_no,P_name,Sex,Prof,Deptno)values('000011','刘美萍','女','中级','0002')(6)删除视图。
要求:将视图PersonView删除。
drop View PersonView;三、实验总结1.在删除员工工号为‚000010‛的员工数据时遇到了什么问题?必须怎么处理?答:Person表被salary表引用,所以不能执行该命令。
必须先将salary表中的员工工号为‚000010‛的员工数据删除,才能删除Person表中员工工号为‚000010‛的员工数据。
2.对于三个表来说,插入数据的顺序应该是怎样的?答:先插入表dept,再插入Person表,最后插入salary表。
实验四数据查询一、实验目的掌握SQL Server的数据查询语言;掌握SQL语言在不同情况下的灵活应用。
二、实验内容(1) 利用SQL语句查询person表中的所有数据。
select*from person;(2) 条件查询。
要求:①查询person表中所有不重复的职称select distinct Proffrom person②查询person表中职称为中级的所有员工数据select*from personwhere Prof='中级'③查询person表中具有高级职称的男员工信息select*from personwhere prof='高级'and Sex='男';④查询person表中姓名为王云、谢志文或罗向东的员工数据select*from personwhere P_name='王云'or P_name='谢志文'or P_name='罗向东'(3) 使用ORDER BY排序要求:利用SQL语句将工号在000003和000008之间的员工的月收入按实发工资升序排列。
select Factfrom Salarywhere P_no between'000003'and'000008'order by Fact asc(4) 查询工号为000002的员工的基本工资改为原来的2倍,奖金改为原来的1.5倍后的实际收入。
//先执行修改update再查询//直接在select中用表达式fact= Base*2+ Bonus*1.5select Fact=Base*2+1.5*Bonusfrom Salarywhere P_no='000002'(5) 利用SQL语句查询各部门的实发工资总数。
select Dname,sum(Fact)实发工资总数from person,salary,deptwhere person.P_no=salary.P_noand person.Deptno=dept.Deptnogroup by Dname(6) 利用SQL语句查询1月份发放奖金平均数大于200元的部门,并从低到高排序。
select Dname,avg(Bonus) sslfrom dept,salary,personwhere Salary.P_no=person.P_noand dept.Deptno=person.Deptnoand Month=1group by Dname having avg(Bonus)>200order by ssl /*avg (Bonus)*/asc(7) 查询人事部所有员工信息。
select*from person,Salary,deptwhere Salary.P_no=person.P_noand dept.Deptno=person.Deptnoand Dname='人事部'(8) 查询person表中职称为中级的员工信息。