SQL-Serve实验5-索引和视图-
- 格式:doc
- 大小:429.50 KB
- 文档页数:17
实验五SQL Server 视图及索引的创建及使用
实验目的:通过企业管理器和Transact_SQL语句对视图进行创建、修改和删除通过企业管理器:
创建步骤:
最后保存该视图即可。
修改步骤:
进入该界面重新修改该视图即可。
删除步骤:
通过Transact_SQL语句:
创建:create view 视图名
[with encryption]
as select_statement [with check option] 修改:利用 alter view 视图名删除:利用 drop view 视图名
1.通过Transact_SQL语句创建一个视图,计算各个班级的各门课程的平均分。
2. 通过Transact_SQL语句创建一个视图,显示‘高等数学’未过的学生的信息。
3.通过Transact_SQL语句创建一个视图,查询的数据为99521班学生的考试成绩。
3.如何通过企业管理器创建索引?步骤:
点击‘新建’按钮
点击‘确定’
点击‘关闭’
4.如何删除索引?
选中该索引点击‘删除’即可
或
利用 drop index 表名. 索引名完成删除。
实验5 视图、索引5.1实验目的(1)掌握SQL Server中的视图创建、查看、修改和删除的方法。
(2)掌握索引的创建和删除的方法。
5.2实验内容(1)创建、查看、修改和删除视图。
(2)创建、删除索引文件。
5.3实验步骤5.3.1视图操作5.3.1.1 创建视图◆使用SQL Server Management Studio(1)单击“学生选课”数据库前面的+号,右击“视图”,选择“新建视图”命令,弹出“添加表”对话框。
(2)在“添加表”对话框中,添加视图数据来源的表,这里添加三张表,分别是student、course和SC表。
添加表后,单击添加表对话框中的“关闭”按钮,出现创建视图界面。
(3)如果要在视图中显示某张表的某个字段,只需单击其字段前的复选框即可,同时在中间列中会显示该字段,在代码区中会看到具体实现的代码。
(4)如果要查看视图,单击常用工具栏中的“执行”按钮,就可以看到视图的数据显示。
(5)在创建视图中还可以为字段添加列名、进行排序、添加多个筛选条件。
(6)单击常用工具栏中的“保存”按钮,就可以弹出保存视图提示对话框,输入视图名字即可,如view_stu_grade。
◆使用Transact-SQL语句语法格式:create view view_name as select_statement例5.1:在三个表student、course、SC的基础上建立一个视图,取名为view_stu_grade。
create view view_stu_gradeas select student.sno,sname,cname,gradefrom student,sc,coursewhere student.sno=sc.sno and o=o5.3.1.2 修改视图◆使用SQL Server Management Studio视图创建好,就可以利用它进行查询信息了。
如果发现视图的结构不能很好地满足要求,还可以对它进行修改。
实验五视图与索引一.实验目的1.学会使用企业管理器建立视图与索引2.掌握使用SQL语句建立视图与索引二.实验内容1.使用企业管理器建立视图索引2.使用SQL语句建立视图索引三.实验准备1.复习与本次实验内容相关知识2.对本次实验中要求自己完成的部分做好准备四.实验步骤1.用企业管理器建立一个基于学生表、课程表、成绩表的视图,要求该视图显示学号、姓名、课程、成绩o启动企业管理器、注册、连接o"新建视如下图所示o在新视图窗口内的关系图窗格内右击鼠标,弹出的菜单即为视图设计菜单,执行"添加表(B)...",如下图所示再在添加表对话框中选择SCORES表,再单击添加按钮。
依此操作,分别添加STUDENT、COURSES表,单击关闭按钮。
再在关系窗格内,拖动STUDENT表的"SID"至SCORES的STUDENT_ID,拖动COURSES表的"CNO"至SCORES的COURSE_ID,再分别选中STUDENT表的"SID","NAME"列(列前的复选框),COURSES表的"COURSE"列以及SCORES表的"SCORE"列,然后单击"!"按钮,显示视图结果,如下图所示:单击保存按钮,将视图保存为V_SCORES,单击确定.2.用查询分析器建立一个基于学生表、班级表的学生视图(V_STUDENTS),包括学号、姓名、班级、系,SQL语句如下:CREATE VIEW dbo.V_STUDENTSASSELECT dbo.U_STUDENTS.ID, dbo.U_,dbo.U_CLASSES.CLASS,dbo.U_CLASSES.DEPARTMENTFROM dbo.U_STUDENTS INNER JOINdbo.U_CLASSES ON dbo.U_STUDENTS.CLASS_ID = dbo.U_CLASSES.ID3.自己写一个SQL语句建立一个基于课程表的视图(V_COURSES),要求显示课程编号.课程名、学分。
SQLServer索引和视图Ø 索引1、什么是索引索引就是数据表中数据和相应的存储位置的列表,利⽤索引可以提⾼在表或视图中的查找数据的速度。
2、索引分类数据库中索引主要分为两类:聚集索引和⾮聚集索引。
SQL Server 2005还提供了唯⼀索引、索引视图、全⽂索引、xml索引等等。
聚集索引和⾮聚集索引是数据库引擎中索引的基本类型,是理解其他类型索引的基础。
# 聚集索引聚集索引是值表中数据⾏的物理存储顺序和索引的存储顺序完全相同。
聚集索引根据索引顺序物理地重新排列了⽤户插⼊到表中的数据,因此,每个表只能创建⼀个聚集索引。
聚集索引经常创建在表中经常被搜索到的列或按顺序访问的列上。
在默认情况下,主键约束⾃动创建聚集索引。
# ⾮聚集索引⾮聚集索引不改变表中数据列的物理存储位置,数据与索引分开存储,通过索引指向的地址与表中的数据发⽣关系。
⾮聚集索引没有改变表中物理⾏的位置,索引可以在以下情况下使⽤⾮聚集索引:⼀、如果某个字段的数据唯⼀性⽐较⾼⼆、如果查询所得到的数据量⽐较少聚集索引和⾮聚集索引的区别:聚集索引⾮聚集索引每个表只允许创建⼀个聚集索引最多可以有249个⾮聚集索引物理的重排表中的数据以符合索引约束创建⼀个键值列表,键值指向数据在数据页中的位置⽤于经常查找数据的列⽤于从表中查找单个值的列# 其他类型索引除了以上索引,还有以下类型索引:a、唯⼀索引:如果希望索引键都不同,可以创建唯⼀索引。
聚集索引和⾮聚集索引都可以是唯⼀索引。
b、包含新列索引:索引列的最⼤数量是16个,索引列的字节总数的最⾼值是900。
如果当多个列的字节总数⼤于900,切⼜想在这些劣种都包含索引是,可以使⽤包含性列索引c、视图索引:提供视图查询效率,可以视图的索引物理化,也就是说将结果集永久存储在索引中,可以创建视图索引。
d、 XML索引:是与xml数据关联的索引形式,是XML⼆进制blob的已拆分持久表⽰形式e、全⽂索引:⼀种特殊类型的基于标记的功能性功能,⽤于帮助在字符串中搜索赋值的词3、创建索引语法create [unique] [clustered | noclustered]index index_nameon table_name (column_name ...)[with fillfactor=x]unique唯⼀索引clustered聚集索引noclustered⾮聚集索引fillfactor填充因⼦⼤⼩,范围在0-100直接,表⽰索引页填满的空间所占的百分⽐。
索引基础索引的创建和使用索引的删除除表以外,索引可能就是大型数据库系统中最重要的对象了。
索引是一种树型结构,如果使用正确,可以减少定位和查询数据所需的I/O操作。
另一种说法是,索引可以加快表中查找数据记录的速度。
·58·SQL技术与网络数据库开发详解5.1 索引基础索引是一种数据库对象。
在有大量记录的数据表中查询数据时,如果使用索引可以很快查到想要的数据。
索引还有另外一种用途,那就是强制数据的唯一性。
5.1.1 使用索引的原因对于大部分数据库用户来说索引是一个非常陌生的概念。
因为普通用户很少特意去使用索引,只有那些管理着海量数据的DBA才会去特意创建索引和使用索引。
使用索引有两个主要的原因: 提供唯一的码值。
提高查询性能。
当用户创建带有PRIMARY KEY或UNIQUE约束的数据表时,SQL Server或Oracle早已经在后台为该表自动创建了唯一索引,并以此强制数据的唯一性。
使用索引能够提高性能的原因其实也很好理解。
例如,要查询本书中关于Oracle的DECODE函数的内容,可以使用两种方法。
一种是从第1页开始一页一页地向后找;另一种是在目录中先找到DECODE函数所在的页数,然后,直接翻到该页上。
可想而知,在书比较厚的情况下,采用第二种方法很快就能找到需要的内容。
这里的索引就像本书的目录,因此使用索引会提高查询性能。
当然,假设本书只有3页,则使用第一种方法会更实惠。
这就表明数据表中的记录越多,使用索引就会得到越大的效益。
反之,使用索引就没有什么价值了。
5.1.2 索引的种类SQL Server和Oracle等大型数据库系统,按存储结构的不同将索引分为两类,即聚簇索引和非聚簇索引。
1.聚簇索引一个聚簇索引就是一个在物理上与表融合在一起的视图。
表和视图共享相同的存储区域。
聚簇索引在物理上以索引顺序重新整理了数据的行。
这种体系结构中的一个表只允许有一个聚簇索引。
在SQL Server中,删除和重建一个聚簇索引对于改造一个表来说是一个常用的技术,这是一种保证数据页在磁盘上邻近的方法,同时,也是重建表中一些空闲空间的好方法。
实验5 索引和视图1.实验目的(1)掌握使用SQL Server管理平台和Transact-SQL语句CREATE INDEX创建索引的方法。
(2)掌握使用SQL Server管理平台查看索引的方法。
(3)掌握使用SQL Server管理平台和Transact-SQL语句DROP INDEX删除索引的方法。
(4)掌握使用SQL Server管理平台和Transact-SQL语句CREATE VIEW创建视图的用法。
(5)了解索引和视图更名的系统存储过程sp_rename的用法。
(6)掌握使用Transact-SQL语句ALTER VIEW修改视图的方法。
(7)了解删除视图的Transact-SQL语句DROP VIEW的用法。
2.实验内容及步骤(1)分别使用SQL Server管理平台和Transact-SQL语句为studentsdb数据库的student_info表和curriculum表创建主键索引。
使用SQL Server管理平台:a. b.c.d.e.使用Transact-SQL语句:(2)使用SQL Server管理平台按curriculum表的课程编号列创建唯一性索引。
(3)分别使用SQL Server管理平台和Transact-SQL语句为studentsdb数据库的grade表的“分数”字段创建一个非聚集索引,命名为grade_index。
使用SQL Server管理平台:使用SQL语句:use studentsdbgocreate index grade_indexon grade (分数)(4)为studentsdb数据库的grade表的“学号”和“课程编号”字段创建一个复合唯一索引,命名为grade_id_c_ind。
create index grade_id_c_indon grade (学号,课程编号)(5)分别使用SQL Server管理平台和系统存储过程sp_helpindex查看grade表和student_info表上的索引信息。
数据库实验五:视图的应用一、实验目的与要求:1.实验目的(1)理解视图的概念;(2)掌握视图的使用方法。
(3)理解视图和基本表的异同之处。
2.实验要求(1)参照实验五中完成的查询,按如下要求设计和建立视图:1)基于单个表按投影操作定义视图。
2)基于单个表按选择操作定义视图。
3)基于单个表按选择和投影操作定义视图。
4)基于多个表根据连接操作定义视图。
5)基于多个表根据嵌套操作定义视图。
6)定义含有虚字段的视图。
(2)分别在定义的视图设计一些查询(包括基于视图和基本表的连接或嵌套查询)。
(3)在定义的视图上进行插入、更新和删除操作,分情况讨论哪些操作可以成功完成,哪些操作不能完成,并分析原因。
(4)在实验报告中要给出具体的视图定义要求和操作要求,并针对各种情况做出具体的分析和讨论。
二、实验内容1、实验原理(1)视图是用SQL SELECT查询定义的,创建视图命令格式如下:CREATE VIEW <视图名> AS <SELECT-查询块>(2)删除视图的命令格式如下:DROP VIEW <视图名>2、实验步骤与结果(1)调出SQL Server2005软件的用户界面,进入SQL SERVER MANAGEMENT STUDIO。
(2)输入自己编好的程序。
(3)检查已输入的程序正确与否。
(4)运行程序,并分析运行结果是否合理和正确。
在运行时要注意当输入不同的数据时所得到的结果是否正确。
(5)输出程序清单和运行结果。
(1)参照实验五中完成的查询,按如下要求设计和建立视图:1)基于单个表按投影操作定义视图。
create view v asselect教师编号,姓名from教师create view v_order asselect*from教师where职称='教授'3)基于单个表按选择和投影操作定义视图。
create view v_cuss asselect教师编号,姓名,职称from教师where职称='教授'4)基于多个表根据连接操作定义视图。
西北师范大学计算机科学与工程学院学生实验报告2、在student表的studentno和classno列上创建唯一索引UQ-stu,若该索引已存在,则删除后重建。
然后输出student表中的记录,查看输出结果的顺序。
SQL代码:USE teachingGOIF EXISTS(SELECT name FROM sysindexes WHERE name='UQ_stu')DROP INDEX student.UQ_stuGOCREATE NONCLUSTERED INDEX UQ_stu ON student(studentno,classno)GOSELECT*FROM student实验结果:3、修改UQ-stu的索引属性,当执行多行插入操作时出现重复键值,则忽略该记录,且设置填充因子为80%SQL代码:USEteachingGOALTER INDEX UQ_stu ON student REBUILDWITH(PAD_INDEX=ON,FILEFACTOR=80,IGNORE-DUP_KEY=ON)GO实验结果:4、创建一个视图v-teacher,查询“计算机学院”所有教师的信息SQL代码:USE teachingGOCREATE VIEW v_teacherASSELECT*FROM teacherWHERE department='计算机学院'GOSELECT*FROM v_teacher实验结果:5、创建一个视图v-avgstu,查询每个学生的学号、姓名及平均分,并且按照平均分降序排序SQL代码:USE teachingGOCREATE VIEW v_avgstuASSELECT TOP(100)PERCENT student.studentno,studnt.sname,AVG(score.final)AS 'average'FROM student,scoreWHERE student.studentno=score.studentnoAND score.final IS NOT NULLGROUP BY student.studentno,student.snameORDER BY AVG(score.final)DESCGOSELECT*FROM v_avgstu实验结果:6、修改v-avgstu的视图定义,添加WITH CHECK OPTION选项SQL代码:USE teachingGOALTER VIEW v_avgstuASSELECT*FROM teacherWHERE department='计算机学院'WITH CHECK OPTIONGO实验结果:7、通过视图v-avgstu向基表teacher中分别插入数据(‘05039’,‘张馨月’,‘计算机应用’,‘讲师’,‘计算机学院’)和(‘06018’,‘李诚’,‘机械制造’,‘副教授’,‘机械学院’),并查看插入数据的情况SQL代码:USE teachingGOINSERT INTO v_teacherVALUES('05039','张馨月','计算机应用','讲师','计算机学院')INSERT INTO v_teacherVALUES('06018','李诚','机械制造','副教授','机械学院')SELECT*FROM v_teacherSELECT*FROM teacher实验结果:8、通过视图v-teacher将基表teacher中教师编号为05039的教师职称修改为“副教授”SQL代码:USE teachingGOUPDATE v_teacherSET prof='副教授'WHERE teacherno='05039'GOSELECT*FROM teacher实验结果:实验总结:通过本次实验掌握了索引、统计信息和视图等数据库对象的基本概念和基本操作。
韶关学院
学生实验报告册
实验课程名称:数据库技术与应用
实验项目名称:数据库的索引和视图
实验类型(打√):(基础☑
设计
院系:教育学院专业班级:11教育技术学姓名:学号:
指导老师:林育曼
韶关学院教务处编制
一、实验预习报告内容
二、实验原始(数据)记录实验时间:2013年11月5日(星期二第五六节)
三、实验报告内容
6.使用企业管理器的“向导”工具对grade表创建一个聚集索引和唯一索引。
根据实验指导老师要求另附相同规格的纸张并粘贴在相应的“实验报告册”中。
2、实验报告册属教学运行材料,院系(中心)应按有关规定归档保管。
实验五索引一、实验目的1.掌握索引的使用方法;2.掌握在对象资源管理器中创建和管理索引;3.掌握T-SQL语句创建和管理索引;二、实验准备1.将第五章的XSGL数据库恢复到DBMS,数据库中包含有以下表:1)学生表 Student ( Sno , Sname , Sex , Sbirthday , Sdept )2)课程表 Course ( Cno , Cname , Ccredit )3)学生选课表 Score ( Sno , Cno , Grade )2.注意恢复后检查表中的约束和数据。
三、实验要求1.了解索引的作用、分类及创建方法;2.在对象资源管理器中创建、修改、删除和使用索引。
3.利用T-SQL语句创建、修改、删除和使用索引。
4.完成实验报告。
四、实验内容1.启动SQL Server Management Studio,在对象资源管理器中,利用图形化的方法创建和管理下列索引:1)对数据表Student中字段Sname建立非聚集索引idx_name;2)针对Student表的Sno和Sname列创建复合索引idx_no_name;3)修改索引idx_name,使其成为唯一索引(考虑是否能够修改成功,如不能则需要将原数据表数据进行怎样修改后可以建立);4)删除数据表Student的唯一索引idx_name;2. 利用T-SQL语句创建和管理以下索引:1)对Course表的Cname列创建非聚集索引idx_cname;2)对Score表的Sno和Cno列创建复合索引idx_sno_cno;3)将idx_cname进行修改,使其成为唯一索引;(使用T-SQL语句进行修改索引的操作实际上是先将索引进行删除,然后再重新定义索引。
最后使用“ALTER INDEX索引名ON数据表REBUILD ”语句重置索引完成修改。
)4)利用系统存储过程sp_helpidex查看索引idx_cname信息;5)删除索引idx_cname。
SQL-Serve实验5-索引和视图-
实验5 索引和视图
1.实验目的
(1)掌握使用SQL Server管理平台和Transact-SQL语句CREATE INDEX创建索引的方法。
(2)掌握使用SQL Server管理平台查看索引的方法。
(3)掌握使用SQL Server管理平台和Transact-SQL语句DROP INDEX删除索引的方法。
(4)掌握使用SQL Server管理平台和Transact-SQL语句CREATE VIEW创建视图的用法。
(5)了解索引和视图更名的系统存储过程sp_rename的用法。
(6)掌握使用Transact-SQL语句ALTER VIEW修改视图的方法。
(7)了解删除视图的Transact-SQL语句DROP VIEW的用法。
2.实验内容及步骤
(1)分别使用SQL Server管理平台和Transact-SQL语句为studentsdb数据库的student_info表和curriculum表创建主键索引。
使用SQL Server管理平台:
a. b.
c.
d.
e.
使用Transact-SQL语句:
(2)使用SQL Server管理平台按curriculum表的课程编号列创建唯一性索引。
(3)分别使用SQL Server管理平台和Transact-SQL语句为studentsdb数据库的grade表的“分数”字段创建一个非聚集索引,命名为grade_index。
使用SQL Server管理平台:
使用SQL语句:
use studentsdb
go
create index grade_index
on grade (分数)
(4)为studentsdb数据库的grade表的“学号”和“课程编号”字段创建一个复合唯一索引,命名为grade_id_c_ind。
create index grade_id_c_ind
on grade (学号,课程编号)
(5)分别使用SQL Server管理平台和系统存储过程
sp_helpindex查看grade表和student_info表上的索引信息。
使用SQL Server管理平台:
右击表grade/表student_info==》修改==》索引/键
使用SQL语句:
use studentsdb
go
sp_helpindex grade
use studentsdb
go
sp_helpindex student_info
(6)使用SQL Server管理平台对grade表创建一个聚集索引和唯一索引。
对grade表创建一个聚集索引:
对grade表创建一个唯一索引:
(7)使用系统存储过程sp_rename将索引grade_index更名为grade_ind。
use studentsdb
go
sp_rename'grade.grade_index','grade_ind','index'
(8)分别使用SQL Server管理平台和Transact-SQL语句DROP INDEX删除索引grade_ind。
再次使用系统存储过程sp_helpindex查看grade表上的索引信息。
使用SQL Server管理平台:
表grade==》索引grade_ind==》右击删除
使用SQL语句:
use studentsdb
go
drop index grade.grade_ind
(9)在studentsdb数据库中,以student_info表为基础,使用SQL Server管理平台建立名为v_stu_i的视图,使视图显示学生姓名、性别、家庭住址。
(10)在studentsdb数据库中,使用Transact-SQL语句CREATE VIEW建立一个名为v_stu_c的视图,显示学生的
学号、姓名、所学课程的课程编号,并利用视图查询学号为0003的学生情况。
(11)基于student_info表、curriculum表和grade表,建立一个名为v_stu_g的视图,视图中具有所有学生的学号、姓名、课程名称、分数。
使用视图v_stu_g查询学号为0001的学生的所有课程与成绩,如图1-9所示。
《网络数据库应用》实验指导书—SQL Server 2005 20
图1-9 学号为0001的学生的视图信息
使用SQL Server管理平台:
(12)分别使用SQL Server管理平台和Transact-SQL语句修改视图v_stu_c,使之显示学号、姓名、每个学生所学课程数目。
使用SQL Server管理平台:
使用SQL Server语句:
(13)使用Transact-SQL语句ALTER VIEW修改视图v_stu_i,使其具有列名学号、姓名、性别。
(14)使用系统存储过程sp_rename将视图v_stu_i更名为
v_stu_info。
(15)利用视图v_stu_i为student_info表添加一行数据:学号为0015、姓名为陈婷、性别为女。
(16)利用视图v_stu_i删除学号为0015的学生记录。
(17)利用视图v_stu_g修改姓名为刘卫平的学生的高等数学的分数为84。
(18)使用Transact-SQL语句DROP VIEW删除视图
v_stu_c和v_stu_g。
3.实验思考
(1)是否可以通过视图v_stu_g修改grade表中学号列数据?
不可以。
因为视图包含了三个个基础表,学生表,课程表,成绩表,且要更改的学号列为成绩表和学生表的公共列,所以不能通过视图更改对应的基础表的列数据。
(2)比较视图和基表操作表中数据的异同。
(1)相同点:视图作为一个查询结果与基表具有相似的结构,对视图的操作与对表的操作一样,通过视图可以完成某些和基础表相同的一些数据操作,如数据的检索、添加、修改和删除(2)不同点:视图是一种数据库对象,是从一个或多个表或视图中导出的虚拟表。
视图所对应的数据并不正在地存储在视图中,而是存在其所引用的基表中,视图的结构和数据是对基表进行查询的结果
(3)可更新视图必须满足哪些条件?
(1)任何修改(包括 UPDATE、INSERT 和 DELETE 语句)都只能引用一个基本表的列。
(2)视图中被修改的列必须直接引用表列中的基础数据。
不能通过任何其他方式对这些列进行派生,如通过聚合函数、计算(如表达式计算)、集合运算等。
(3)被修改的列不受 GROUP BY、HAVING、DISTINCT 或 TOP 子句的影响。
(4)什么是索引?SQL Server 2005中有两种形式的索引:聚集索引和非聚集索引,简单叙述它们的区别?
索引是对数据库表中一列或多列的值进行排序的一种结构。
一个表中只能有一个聚集索引,但是可以有249个非聚集索引。
聚集索引查找数据比非聚集索引要快很多,但是会比非聚集索引所占空间要大很多。
(5)能否在视图上创建索引?
不可以的!
索引只能建立在一个表的列上
注意:请同学们自行保存相关代码,以备下次实验使用,实验完成后,要及时撰写实验报告。