sql_server实训报告
SQL Server实训报告
专 业: 计算机应用技术(过程控制方向) 班 级: 过控131班 姓 名: 张改凤 学 号: 201305260130 指导老师: 李模刚 实训地点: 信控2机房
成 绩:
-----------------------------------------------------------------------------
一、实训目标
掌握SQL Server数据库创建方法,掌握数据表、数据库完整性约束、基本查询语句的使用、数据更新方法、视图索引的建立、常用数据库对象的创建及使用、SQL编程序等多方面的综合练习,旨在强化训练,真正做到熟练掌握甚至精通,为以后数据库维护、网络管理、编程打好基础。
二、实训要求
完成实训题目,并将最终结果保存在自己的FTP上(在自己的FTP帐号上建立” gk13130_张改凤”文件夹,将所有实训结果、脚本文件、数据库、实训报告均保存在此文件夹下),所有操作尽量使用查询分析器完成。
实训最低要求:查询数据和数据更新要求必须用查询分析器完成,其他可在SSMS中完成,但要求能够生成脚本文件,并能读懂其中所有代码,并可进行简单修改模仿。
三、考核标准
(1)平时实习纪律考勤 占10% (2)实训报告 占40% (3)代码文件及数据库文件 占40% (4)实习总结 占10%
1.创建数据库及删除
创建一个名称为xscj的数据库,脚本文件名:xscj.sql
CREATE DATABASE [xscj] ON PRIMARY
( NAME = N'xscj', FILENAME = N'D:\\ddd\\xscj.mdf' , SIZE = 3072KB , FILEGROWTH = 1024KB ) LOG ON
( NAME = N'xscj_log', FILENAME = N'D:\\ddd\\xscj_log.ldf' , SIZE = 1024KB , FILEGROWTH = 10%) GO
EXEC dbo.sp_dbcmptlevel @dbname=N'xscj', @new_cmptlevel=90
EXEC msdb.dbo.sp_delete_database_backuphistory @database_name = N'xscj' GO
USE [master] GO
/****** 对象: Database [xscj] 脚本日期: 08/27/2014 10:00:54 ******/ DROP DATABASE [xscj] GO
2.创建文件夹ddd
exec sp_configure'show advanced options',1; reconfigure ;
exec sp_configure'xp_cmdshell',1; reconfigure ;
exec xp_cmdshell'md d:\\ddd'; reconfigure ;
exec sp_configure'xp_cmdshell',0; reconfigure ;
exec sp_configure'show advanced options',0;
3.创建和使用表
(1)建立学生表stu,其结构为:
学号 nchar(12) not null, 姓名 char(255)not null unique,
年龄 int check(年龄 >=5 and 年龄 <=60), 身份证号 char(18),。其中“学号”为主键。 在stu表中输入如下记录:
(2)建立课程表course,其结构为
课程号 char(255) not null , 课程名 char(255),
学分 int,其中,“课程号”为主键。在course表中输入如下记录:
(3)建立选课表select1,其结构为:
学号 nchar(12)not null, 课程号 char(255) not null,
成绩 float 。其中,“学号”和“课程号”为主键。在select1表中输入如下记录:
(4)建立stu、course和select1个表之间的关系。 3个表之间的关系主要指主外键关系。 4.数据库完整性创建约束
------------------------------------------------------------------------------------------------------- 5.测试查询数据
(1). select 学号'测试一',姓名,年龄from stu where 姓名like '小%';
(2). select 学号'测试二',姓名,'良好' from stu where 姓名like '%肖';
(3). select 姓名'测试三'from stu where 姓名like '_[晓肖]';
(4). select 姓名'测试四',年龄from stu where 年龄between 20 and 21
order by 年龄;
-
(5). select getdate(),max(年龄) '最大年纪',
min(年龄) 最小年龄,sum(年龄)/count(学号) 平均年龄from stu;
(6). select 姓名'测试六',年龄from stu where 年龄>(select avg(年龄) from
stu);
(7). 复制数据到新表newstu:
select '测试' 学号,姓名,年龄into newstu from stu order by 年龄desc;
select 学号,姓名,年龄from newstu;
(8). 复制数据到新表stu1:
create table stu2(
学号 nchar(12) not null, 姓名 char(255)not null unique, 年龄 int check(年龄>=5 and 年龄<=60), );
create table stu1(
学号 nchar(12) not null, 姓名 char(255)not null unique, 年龄 int check(年龄>=5 and 年龄<=60), );
insert into stu1(学号,姓名,年龄) select 学号,姓名,年龄from stu;
select 学号表二学号,姓名,年龄from stu1;
(9).select 学号'测试',姓名from stu where 学号in(select distinct 学号
from select1);
(10). select 学号'测试',姓名from stu where 姓名in('小小','晓晓');
(11).笛卡尔积:
select stu.姓名'笛卡尔积',course.课程名,select1.成绩,select1.学分绩
点from select1,course,stu where stu.学号=select1.学号and course.课程号=select1.课程号order by select1.成绩asc;
(12).按组求平均成绩
select '按组求平均',课程名,avg(成绩) '平均成绩' from select1,course where course.课程号=select1.课程号group by 课程名having avg(成绩)>88;
(13). select 'compute测试',* from select1,course where course.课程号
=select1.课程号and select1.课程号=001 compute sum(成绩);
select 'compute测试',* from select1,course where course.课程号=select1.课程号and course.课程号in('004','005')
order by course.课程号compute avg(成绩) by course.课程号;
(14).自然连接,交叉查询,笛卡尔积
select '笛卡尔积,自然连接',* from select1,course; select '交叉连接', * from select1 cross join course;
select '有用笛卡尔积', * from select1,course where select1.课程号=course.课程号;
select '内连接', * from select1 inner join course on select1.课程号=course.课程号; /*内连接*/
select 学号,姓名into stu3 from stu;select 学号,年龄into stu4 from stu; select '内连接',* from stu3 inner join stu4 on stu3.学号=stu4.学号; select '有用笛卡尔积',* from stu3,stu4 where stu3.学号=stu4.学号; /*外连接*/
select 学号,姓名into stu31 from stu;select 学号,年龄into stu41 from stu;
insert into stu31 (学号,姓名) values ('201305260000','小潇'); insert into stu41 (学号,年龄) values ('201305261000',41)
select '右连接',* from stu31 right join stu41 on stu31.学号=stu41.学号;
select '左连接',* from stu31 left join stu41 on stu31.学号=stu41.学号;
select '全连接',* from stu31 full join stu41 on stu31.学号=stu41.学号;
(15). 集合运算并(union),交(intersect),差(except)
(16).any all some exists
6.更新数据
alter table [select1] add 学分绩点float;
update [select1] set 学分绩点=3.5 where 课程号='001'; update [select1] set 学分绩点=3.5 where 课程号='002'; update [select1] set 学分绩点=3.0 where 课程号='003'; update [select1] set 学分绩点=2.5 where 课程号='004'; update [select1] set 学分绩点=3.5 where 课程号='005'; update [select1] set 学分绩点=3.0 where 课程号='006';
alter table [course] add 任课老师char(20);
update [course] set 任课老师='张老师' where 课程号='001'; update [course] set 任课老师='李老师' where 课程号='002'; update [course] set 任课老师='王老师'where 课程号='003'; update [course] set 任课老师='蒲老师' where 课程号='004'; update [course] set 任课老师='任老师' where 课程号='005'; update [course] set 任课老师='赵老师' where 课程号='006';
7.视图
(1)建立视图1
create view shitu as select 姓名,成绩from select1,stu where stu.学号=select1.学号;
(2)建立视图csel
create view csel as
select stu.学号,姓名,course.课程号,班级from stu,select1,course
where stu.学号=select1.学号and course.课程号=select1.课程号and 班级='过控班';
8.索引
create index xm on stu(年龄);
select '索引',* from [xscj].[dbo].[stu]; drop index stu.xm;
select * from [xscj].[dbo].[stu];
9.SQL编程
DECLARE @var1 int,@var2 money,@sum1 int;
select @var1=50,@var2=$29.95; set @var1=50; set @var2=$29.95; select @var1,@var2; declare @sum int,@i int; set @i=1;set @sum=0; while @i<=100 begin
set @sum=@sum+@i; set @i=@i+1; end print @sum;
set @sum1=@sum/100;
update select1 set 成绩=@sum1 where 学号='201305260103';
10.删除
delete from [select1] where 课程号='003'; alter table [select1] drop column 成绩;
alter table [select1]drop constraint FK_课程号;
11.创建存储过程 (1)无参
create procedure p3 as select * from stu;
(2)一个参数
create procedure p1 @sn varchar(10)as select * from stu where 姓名=@sn;
(3)两个参数
create procedure p2 @sn varchar(10), @snn varchar(10)
as select * from stu where 姓名=@sn and 姓名=@snn;
(4)执行命令
exec p3; exec p1 '笑笑'; exec p2 '笑笑','筱筱';
12.创建触发器
create trigger t1 on stu for update as print 'stu表将被修改!'; create trigger t2 on stu for insert as print 'stu表将被修改!' create trigger t3 on stu for delete as print 'stu表将被修改!'; create trigger t4 on stu after update as print 'stu表已经被修改!'; create trigger t5 on stu after insert as print 'stu表已经被修改!'; create trigger t6 on stu after delete as print 'stu表已经被修改!'; create trigger t7 on stu instead of update as print 'stu表不能被修改!'; create trigger t8 on stu instead of insert as print 'stu表不能被修改!'; create trigger t9 on stu instead of delete as print 'stu表不能被修改!';
13.角色创建
use xscj
EXEC sp_addrole 'm_role'; grant select on stu to m_role; grant select on csel to m_role; grant exec on p4 to m_role; EXEC sp_addlogin 'logteac1','01'; EXEC sp_addlogin 'logteac2','02';
EXEC sp_grantdbaccess 'logteac1','dbuser1'; EXEC sp_grantdbaccess 'logteac2','dbuser2'; EXEC sp_addrolemember 'm_role','dbuser1'; EXEC sp_addrolemember 'm_role','dbuser2';
14.授权
grant select on stu to dbuserzhao; grant select on csel to dbuserzhao; grant exec on p4 to dbuserzhao;
15.导入VB查询 16.生成网站
实 训 总 结
本次实训时间较长,实训内容涉及面广。从数据库的创建、表的创建以及对表中的内容进行添加、修改和删除,视图的创建,索引以及SQL编程过程的建立等等许多内容。将这一学期所学数据库的所有知识都涉及到了。
在实训中也会遇到一些问题,但我都会反复读题仔细看书最终将其解决。实在又不会的就问问老师。但有时候还是感觉自己对这门课掌握的不是很好,有些知识理解的不是很透彻从而导致因为一些细节上的东西而把题做错。这也是我应该反思的,在以后的学习中我一定要力争将每个问题都弄懂,不再囫囵吞枣。
总而言之,这次的实训对我的帮助挺大的。不仅是对于这门课知识的掌握,还有一些学习上的一些技巧。我会把这次实训学到的东西应有到别的学科上,总之很感谢这次实训,也很谢谢老师这学期对我们的教导。
因篇幅问题不能全部显示,请点此查看更多更全内容