实验三 索引和视图.docx
《实验三 索引和视图.docx》由会员分享,可在线阅读,更多相关《实验三 索引和视图.docx(14页珍藏版)》请在冰点文库上搜索。
![实验三 索引和视图.docx](https://file1.bingdoc.com/fileroot1/2023-5/16/fe39634e-9b41-4c05-8d6d-a263d0eb71db/fe39634e-9b41-4c05-8d6d-a263d0eb71db1.gif)
实验三索引和视图
实验三索引和视图
一、实验目的
1.掌握利用SSMS和T—SQL语句创建和删除索引的两种方法。
2.掌握利用SSMS和T—SQL语句创建、查询、更新及删除视图的方法。
二、实验要求
1.能认真独立完成实验内容;
2.实验前做好上机实验的准备,针对实验内容,认真复习与本次实验有关的知识,完成实验内容的预习准备工作;
3.验后做好实验总结,根据实验情况完成实验报告。
情况完成总结报告。
三、实验学时
2学时
四、实验内容
1、用T—SQL建立一个“学生选课数据库”,在此基础上用SQL语句建立该数据库包含的学生表,课程表,学生选修表:
学生表:
Student(Sno,Sname,Ssex,Sage,Sdept)其中Sno为主键且Sname不能为空值,且取值唯一、Ssex只能取值男或女、Sage在15到30之间:
Sno
Sname
Ssex
Sage
Sdept
S01
S02
S03
S04
S05
S06
王建平
刘华
范林军
李伟
黄河
长江
男
女
女
男
男
男
21
19
18
19
18
20
自动化
自动化
计算机
数学
数学
数学
createdatabase选课数据库
use选课数据库
createtablestudent(snochar(5)primarykey,
snamechar(10)notnullunique,
ssexchar(3)constraintssex_chcheck(ssexin('男','女')),
sageintnotnullconstraintsage_chcheck(sagebetween15and30),
sdeptchar(10))
课程表:
Course(Cno,Cname,Cpno,Credeit)其中Cno为主键
Cno
Cname
Cpno
Credit
C01
英语
NULL
4
C02
数据结构
C05
2
C03
数据库
C02
2
C04
DB_设计
C03
3
C05
C++
NULL
3
C06
网络原理
C07
3
C07
操作系统
C05
3
createtablecourse(cnochar(5)primarykey,
cnamechar(10)notnull,
cpnochar(5),
creditintnotnull)
insertintocourse
values('C01','英语',null,4)
insertintocourse
values('C02','数据结构','C05',2)
insertintocourse
values('C03','数据库','C02',2)
insertintocourse
values('C04','DB_设计','C03',3)
insertintocourse
values('C05','C++',null,3)
insertintocourse
values('C06','网络原理','C07',3)
insertintocourse
values('C07','操作系统','C05',3)
学生选修表:
SC(Sno,Cno,Grade)其中Sno,Cno为主键同时又为外键、Grade值在0到100;
Sno
Cno
Grade
S01
C01
92
S01
C03
84
S02
C01
90
S02
C02
94
S02
C03
82
S03
C01
72
S03
C02
90
S04
C03
75
createtablesc(snochar(5)notnull,
cnochar(5)notnull,
gradeintconstraintgrade_chcheck(gradebetween0and100),
primarykey(sno,cno),
constraintfk_snoforeignkey(sno)referencesstudent(sno),
constraintfk_cnoforeignkey(cno)referencescourse(cno))
insertintosc
values('S01','C01',92)
insertintosc
values('S01','C03',84)
insertintosc
values('S02','C01',90)
insertintosc
values('S02','C02',94)
insertintosc
values('S02','C03',82)
insertintosc
values('S03','C01',72)
insertintosc
values('S03','C02',90)
insertintosc
values('S04','C03',75)
2.索引的建立、删除
①用SSMS的方式为Student表按Sno(学号)升序建唯一索引
②用T—SQL语句为Course表按Cno(课程号)升序建唯一索引,
createuniqueindexcourse_cno
oncourse(cnoasc)
③用T—SQL语句为SC表按Sno(学号)升序和Cno(课程号)号降序建唯一索引。
createuniqueindexsc_sno_cno
onsc(snoasc,cnodesc)
④能否用T—SQL语句再为表Students的Sname(姓名)和Sno(学号)列上建立一个聚簇索引?
若不能说明原因?
不能,因为student表中主键sno唯一,则已默认存在聚集索引,而每个表只能有一个聚集索引,故不能再建立另一个聚集索引。
⑤用T—SQL语句删除基本表SC上的唯一索引。
dropindexsc_sno_cno
onsc
3.用T—SQL完成如下视图的建立、查询、修改及删除
1)建立数学系学生的视图C_Student,并要求进行修改和插入操作时仍需保证该视图只有数学系的学生,视图的属性名为Sno,Sname,Sage,Sdept。
createviewc_student
asselectsno,sname,sage,sdept
fromstudent
wheresdept='数学'
withcheckoption
2)用SSMS的方式建立学生的学号(Sno)、姓名(Sname)、选修课程名(Cname)及成绩(Grade)的视图Student_CR。
3)定义一个反映学生出生年份的视图Student_birth(Sno,Sname,Sbirth)。
createviewstudent_birth
asselectsno,sname,2013-sageas'sbirth'
fromstudent
go
4)建立先修课程为空的课程视图v_course
createviewv_course
asselectcno,cname
fromcourse
wherecpnoisnull
go
5) 建立成绩高于90分的女生成绩视图v_F_grade(包括学号,姓名,课程号及成绩列)
createviewv_f_grade
asselectstudent.sno,sname,o,grade
fromstudent,sc,course
wherestudent.sno=sc.snoando=o
andssex='女'andgrade>90
go
6)建立视图S_AVGAGE(其中包括性别SSEX与平均年龄AVG_AGE两列)用以反映男生、女
生的平均年龄
createviews_avgage
asselectssex,avg(sage)as'avg_age'
fromstudent
groupbyssex
7)对前面创建的视图S_AVGAGE执行更新操作:
UPDATES_AVGAGE
SETAVG_AGE=85
WHERE ssex='女'
上述语句能否成功执行?
为什么?
对视图或函数'S_AVGAGE'的更新或插入失败,因其包含派生域或常量域。
8)在数学系的学生视图C_Student中找出年龄(Sage)小于20岁的学生姓名(Sname)和年龄
(Sage)。
selectsname,sage
fromc_student
wheresage<20
9)在Student_CR视图中查询成绩在85分以上的学生学号(Sno)、姓名(Sname)和课程名称
(Cname)。
selectsno,sname,cname
fromstudent_cr
wheregrade>85
10)将数学系学生视图C_Student中学号为S05的学生姓名改为“黄海”。
updatec_student
setsname='黄海'
wheresno='S05'
11)向数学系学生视图C_Student中插入一个新的学生记录,其中学号为“S09”,姓名为“王海”,年龄为20岁。
insertintoc_student(sno,sname,sage,sdept)
values('S09','王海',20,'数学')
12)删除数学系学生视图C_Student中学号为“S09”的记录。
delete
fromc_student
wheresno='S09'
四、思考题
1.在一个表中可以有多个聚簇索引吗?
为什么?
聚簇索引也叫簇类索引,是一种对磁盘上实际数据重新组织以按指定的一个或多个列的值排序。
由于聚簇索引的索引页面指针指向数据页面,所以使用聚簇索引查找数据几乎总是比使用非聚簇索引快。
每张表只能建一个聚簇索引,并且建聚簇索引需要至少相当该表120%的附加空间,以存放该表的副本和索引中间页。
2.视图有哪些优点?
使用视图的优点如下:
查询的简单性:
将复杂的查询(如多表的连接查询)定义为视图,保留了用户所关心的数据内容,剔除了那些不必要的冗余数据,使其数据环境更加容易控制,从而达到简化用户浏览和操作的目的;
安全保护:
数据库管理员可以在限制表用户的基础上进一步限制视图用户,可以为各种不同的用户授予或撤销在视图上的操作权限,这样,视图用户只能查询或修改他们各自所能见到的数据,从而保证数据库中数据的安全;
掩盖数据库的复杂性:
使用视图可以把数据库的设计和用户的使用屏蔽开来,当基本表发生更改或重新组合时,只需要修改视图的定义即可。
用户还能够通过视图获得和数据库中的表一致的数据。
3.总结创建视图的方法有几种,各种方法实现的步骤,各举一例实现。
两种。
一种是SSMS创建,另一种是T—SQL语句创建。