2024年6月6日发(作者:)
实验三 索引和视图 徐龙琴、刘双印设计制作
实验三 索引和视图
一、 实验目的
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 21
刘华 女 自动化
S02 19
范林军 女 计算机
S03 18
李伟 男 数学
S04 19
黄河 男 数学
S05 18
长江 男 数学
S06 20
create database 选课数据库
use 选课数据库
create table student(sno char(5) primary key,
sname char(10) not null unique,
ssex char(3) constraint ssex_ch check (ssex in('男','
女')),
sage int not null constraint sage_ch check (sage between
15 and 30),
sdept char(10))
实验三 索引和视图 徐龙琴、刘双印设计制作
课程表:Course(Cno,Cname,Cpno,Credeit) 其中Cno为主键
Cno
C01
C02
C03
C04
C05
C06
C07
Cname
英语
数据结构
数据库
DB_设计
C++
网络原理
操作系统
Cpno
NULL
C05
C02
C03
NULL
C07
C05
Credit
4
2
2
3
3
3
3
create table course(cno char(5) primary key,
cname char(10) not null,
cpno char(5),
credit int not null)
insert into course
values('C01','英语',null,4)
insert into course
values('C02','数据结构','C05',2)
insert into course
values('C03','数据库','C02',2)
insert into course
实验三 索引和视图 徐龙琴、刘双印设计制作
values('C04','DB_设计','C03',3)
insert into course
values('C05','C++',null,3)
insert into course
values('C06','网络原理','C07',3)
insert into course
values('C07','操作系统','C05',3)
学生选修表:SC(Sno,Cno,Grade) 其中Sno,Cno为主键同时又为外键、Grade值在0到100;
Sno
S01
S01
S02
S02
S02
S03
S03
S04
Cno
C01
C03
C01
C02
C03
C01
C02
C03
Grade
92
84
90
94
82
72
90
75
create table sc(sno char(5) not null,
cno char(5) not null,
grade int constraint grade_ch check(grade
between 0 and 100),
primary key(sno,cno),
实验三 索引和视图 徐龙琴、刘双印设计制作
constraint fk_sno foreign key (sno) references
student(sno),
constraint fk_cno foreign key (cno) references
course(cno))
insert into sc
values('S01','C01',92)
insert into sc
values('S01','C03',84)
insert into sc
values('S02','C01',90)
insert into sc
values('S02','C02',94)
insert into sc
values('S02','C03',82)
insert into sc
values('S03','C01',72)
insert into sc
values('S03','C02',90)
insert into sc
values('S04','C03',75)
2.索引的建立、删除
①用SSMS的方式为Student表按Sno(学号)升序建唯一索引
实验三 索引和视图 徐龙琴、刘双印设计制作
②用T—SQL语句为Course表按Cno(课程号)升序建唯一索引,
create unique index course_cno
on course(cno asc)
③用T—SQL语句为SC表按Sno(学号)升序和Cno(课程号)号降序建唯一索引。
create unique index sc_sno_cno
on sc(sno asc,cno desc)
④能否用T—SQL语句再为表Students的Sname(姓名)和Sno(学号)列上建立一个聚簇索引?
实验三 索引和视图 徐龙琴、刘双印设计制作
若不能说明原因?
不能,因为student表中主键sno唯一,则已默认存在聚集索引,而每个表只能有一个聚集
索引,故不能再建立另一个聚集索引。
⑤用T—SQL语句删除基本表SC上的唯一索引。
drop index sc_sno_cno
on sc
3.用T—SQL完成如下视图的建立、查询、修改及删除
1)建立数学系学生的视图C_Student,并要求进行修改和插入操作时仍需保证该视图只有
数学系的学生,视图的属性名为Sno,Sname,Sage,Sdept。
create view c_student
as select sno,sname,sage,sdept
from student
where sdept='数学'
with check option
2) 用SSMS的方式建立学生的学号(Sno)、姓名(Sname)、选修课程名(Cname)及成绩(Grade)
的视图Student_CR。
实验三 索引和视图 徐龙琴、刘双印设计制作
3) 定义一个反映学生出生年份的视图Student_birth(Sno, Sname, Sbirth)。
create view student_birth
as select sno,sname,2013-sage as 'sbirth'
from student
go
4)建立先修课程为空的课程视图v_course
create view v_course
as select cno,cname
from course
where cpno is null
go
实验三 索引和视图 徐龙琴、刘双印设计制作
5) 建立成绩高于90分的女生成绩视图v_F_grade(包括学号,姓名,课程号及成绩列)
create view v_f_grade
as select ,sname,,grade
from student,sc,course
where = and =
and ssex='女' and grade>90
go
6)建立视图S_AVGAGE(其中包括性别SSEX与平均年龄AVG_AGE两列)用以反映男生、女
生的平均年龄
create view s_avgage
as select ssex,avg(sage) as 'avg_age'
from student
group by ssex
实验三 索引和视图 徐龙琴、刘双印设计制作
7)对前面创建的视图S_AVGAGE执行更新操作:
UPDATE S_AVGAGE
SET AVG_AGE = 85
WHERE ssex = '女'
上述语句能否成功执行?为什么?
对视图或函数'S_AVGAGE' 的更新或插入失败,因其包含派生域或常量域。
8) 在数学系的学生视图C_Student中找出年龄(Sage)小于20岁的学生姓名(Sname)和年龄
(Sage)。
select sname,sage
from c_student
where sage<20
9) 在Student_CR视图中查询成绩在85分以上的学生学号(Sno)、姓名(Sname)和课程名称
(Cname)。
select sno,sname,cname
from student_cr
where grade>85
实验三 索引和视图 徐龙琴、刘双印设计制作
10) 将数学系学生视图C_Student中学号为S05的学生姓名改为“黄海”。
update c_student
set sname='黄海'
where sno='S05'
11) 向数学系学生视图C_Student中插入一个新的学生记录,其中学号为“S09”,姓名为
“王海”,年龄为20岁。
insert into c_student(sno,sname,sage,sdept)
values('S09','王海',20,'数学')
12) 删除数学系学生视图C_Student中学号为“S09”的记录。
delete
from c_student
where sno='S09'
实验三 索引和视图 徐龙琴、刘双印设计制作
四、思考题
1. 在一个表中可以有多个聚簇索引吗?为什么?
聚簇索引也叫簇类索引,是一种对磁盘上实际数据重新组织以按指定的一个或多个列的
值排序。由于聚簇索引的索引页面指针指向数据页面,所以使用聚簇索引查找数据几乎
总是比使用非聚簇索引快。每张表只能建一个聚簇索引,并且建聚簇索引需要至少相当
该表120%的附加空间,以存放该表的副本和索引中间页。
2. 视图有哪些优点?
使用视图的优点如下:
查询的简单性:将复杂的查询(如多表的连接查询)定义为视图,保留了用户所关心的数
据内容,剔除了那些不必要的冗余数据,使其数据环境更加容易控制,从而达到简化用
户浏览和操作的目的;
安全保护:数据库管理员可以在限制表用户的基础上进一步限制视图用户,可以为各种
不同的用户授予或撤销在视图上的操作权限,这样,视图用户只能查询或修改他们各自
所能见到的数据,从而保证数据库中数据的安全;
掩盖数据库的复杂性:使用视图可以把数据库的设计和用户的使用屏蔽开来,当基本表
发生更改或重新组合时,只需要修改视图的定义即可。用户还能够通过视图获得和数据
库中的表一致的数据。
3. 总结创建视图的方法有几种,各种方法实现的步骤,各举一例实现。
两种。一种是SSMS创建,另一种是T—SQL语句创建。
发布评论