目录
1)对Student表中的学号Sno列建立一个名为index_Sno的索引
2)对Courses表中的课程号Cno列建立一个名为index_Cno的唯一索引。
3)为了方便按姓名和学号查找学生,为Student表创建一个基于“姓名,学号”组合列的组合索引index_Sname_Sno.
4)为了学生成绩表Enrollment创建一个基于“学号,课程号”组合列的聚集、复合索引index_SCno.
5)为课程信息表Courses创建一个基于“课程号,课程名”组合列的唯一、聚集、复合索引index_Cno_Cname.
1)将表Student中所有女生记录定义为一个视图(V_female),在SQL编辑器窗口中输入和执行语句,并通过对象资源管理器来显示结果。
2)对表Student定义一个反映学生年龄的视图(V_age),在SQL编辑器窗口中输入和执行语句,并通过对象资源管理器来显示结果。
一.【实验目的】
(1)熟悉索引和视图。
(2)通过操作理解和掌握索引和视图的基本操作。
二.【实验准备】
(1)已经接入局域网的网络实验室。
(2)机器上已安装 Microsoft SQL Server。
(3)建立数据库 stu,按照表 7-1、表 7-2 和表 7-3 所示建好 3 个表,并且按照图 7-17 插入数据。
表 7-1 Student 结构
列名 | 说明 | 数据类型 | 约束说明 |
Sno | 学号 | 字符串,长度为10 | 主键 |
Sname | 姓名 | 字符串,长度为 8 | 非空值 |
Ssex | 性别 | 字符串,长度为1 | 非空值,取F"或M" |
Sage | 年龄 | 整数 | 允许为空值 |
Sdept | 所在系 | 字符串,长度为15 | 默认为‘Computer’ |
表7-2 Courses 结构
列名 | 说明 | 数据类型 | 约束说明 |
Cno | 课程号 | 字符串,长度为10 | 主键 |
Cname | 课程号 | 字符串,长度为 20 | 非空值 |
PreCno | 先修课程号 | 字符串,长度为 6 | 允许为空值 |
Credits | 学分 | 整数 | 允许为空值 |
表7-3 Enrollment结构
列名 | 说明 | 数据类型 | 约束说明 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Sno | 学号 | 字符串,长度为10 | 主键 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Cno | 课程号 | 字符串,长度为 6 | 非空值 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Grade | 成绩 | 整数 | 允许为空值 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
主键为(Sno,Cno) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
学生表(students)
选课表(Enrollment) 课程表(Courses)
|
图7-17 学生选课数据库
三.【实验内容及步骤】
(1)建立索引
1)对Student表中的学号Sno列建立一个名为index_Sno的索引。
2)对Courses表中的课程号Cno列建立一个名为index_Cno的唯一索引。
3)为了方便按姓名和学号查找学生,为Student表创建一个基于“姓名,学号”组合列的组合索引index_Sname_Sno.
4)为了学生成绩表Enrollment创建一个基于“学号,课程号”组合列的聚集、复合索引index_SCno.
5)为课程信息表Courses创建一个基于“课程号,课程名”组合列的唯一、聚集、复合索引index_Cno_Cname.
(2)创建视图
1)将表Student中所有女生记录定义为一个视图(V_female),在SQL编辑器窗口中输入和执行语句,并通过对象资源管理器来显示结果。
2)对表Student定义一个反映学生年龄的视图(V_age),在SQL编辑器窗口中输入和执行语句,并通过对象资源管理器来显示结果。
(3)使用视图
通过视图V_female查询所有女生记录的信息。
通过视图V_average查询学生的成绩。
四.【实验预习】
1.索引的定义:索引是根据表中的一列或者若干开列按照一定顺序建立的列值与记录行之间的对应关系表。按索引的组织方式可分为聚集索引和非聚集索引。在数据库系统中建立索引主要作用有:
(1)快速存取数据
(2)保证数据记录的唯一性
(3)实现表与表之间的参照完整性
(4)在使用ORDER BY、GROUP BY子句进行数据检索时,利用索引可以减少排序和分组的时间。
2.索引的创建:
(1)用界面方式创建(参考课本116页)
(2)利用SQL命令创建索引。
命令语句:
CREATE [UNIQUE] [CLUSTERED | NONCLUSTERED] INDEX 索引名。
UNIQUE:表示为表或视图创建唯一索引。
CLUSTERED:表示创建聚集索引。
NONCLUSTERED:表示创建非聚集索引。
3.重建索引:命令语句:ALTER INDEX
4.索引的删除:SQL命令语句:DROP INDEX,也可通过界面方式删除索引。
5.视图的概念:视图是一个虚表,即视图所对应的数据不进行实际存储,数据库中只存储视图的定义,在对视图的数据进行操作时,系统根据视图的定义去操作与视图想关联的基本表。
6.创建视图:
(1)通过界面f方式创建视图(课本70页)
(2)命令语句:CREATE VIEW
7.查询视图:命令语句:SELECT
8.更新视图:命令语句:INSERT/UPDATE/DELETE
视图更新条件:创建视图的SELECT语句中没有聚合函数,不包含从基本表列通过计算所得的列,FROM子句中至少包含一个基本表。
9.修改视图定义:命令语句:ALTER VIEW,也可通过界面方式修改。
10.删除视图:命令语句:DROP VIEW,也可以通过通过对象资源管理器删除视图。
五.【实验结果】
创建表
CREATE TABLE student (
Sno VARCHAR(10) PRIMARY KEY,
Sname VARCHAR(8) NOT NULL,
Ssex VARCHAR(1) NOT NULL CHECK (Ssex IN ('F', 'M')),
Sage INT NULL,
Sdept VARCHAR(15) DEFAULT 'Computer'
);
CREATE TABLE Courses (
Cno VARCHAR(10) PRIMARY KEY,
Cname VARCHAR(20) NOT NULL,
PreCno VARCHAR(6) NULL,
Credits INT NULL
);
CREATE TABLE Enrollment (
Sno VARCHAR(10) NOT NULL,
Cno VARCHAR(6) NOT NULL,
Grade INT NULL,
PRIMARY KEY (Sno, Cno)
);
插入数据
INSERT INTO student
VALUES('20010101', 'Jone', 'M', 19, 'Computer'),
('20010102', 'Susan', 'F', 20, 'Computer'),
('20010103', 'Smith', 'M', 19, 'Math'),
('20030101', 'Allen', 'M', 18, 'Automation'),
('20030102', 'Danne', 'F', 21, 'Art')
INSERT INTO Enrollment
VALUES ('20010101', 'C1', 90),
('20010102', 'C1', 88),
('20010102', 'C2', 94),
('20010102', 'C3', 62);
INSERT INTO Courses
VALUES ('C1', 'English', '', 4),
('C2', 'Math', 'C5', 2),
('C3', 'Datebase', 'C2', 2);
(1)建立索引
1)对Student表中的学号Sno列建立一个名为index_Sno的索引
CREATE INDEX index_Sno ON Student (Sno);
2)对Courses表中的课程号Cno列建立一个名为index_Cno的唯一索引。
CREATE UNIQUE INDEX index_Cno ON Courses (Cno);
3)为了方便按姓名和学号查找学生,为Student表创建一个基于“姓名,学号”组合列的组合索引index_Sname_Sno.
CREATE INDEX index_Sname_Sno ON Student(Sname,Sno);
4)为了学生成绩表Enrollment创建一个基于“学号,课程号”组合列的聚集、复合索引index_SCno.
CREATE CLUSTERED INDEX index_SCno ON Enrollment (Sno, Cno);
5)为课程信息表Courses创建一个基于“课程号,课程名”组合列的唯一、聚集、复合索引index_Cno_Cname.
CREATE UNIQUE CLUSTERED INDEX index_Cno_Cname ON Courses(Cname, Cno);
(2)创建视图
1)将表Student中所有女生记录定义为一个视图(V_female),在SQL编辑器窗口中输入和执行语句,并通过对象资源管理器来显示结果。
CREATE VIEW V_female AS
SELECT *
FROM Student
WHERE Ssex = 'F';
2)对表Student定义一个反映学生年龄的视图(V_age),在SQL编辑器窗口中输入和执行语句,并通过对象资源管理器来显示结果。
CREATE VIEW V_age AS
SELECT Sname, Sage AS '年龄'
FROM Student
(3)使用视图
通过视图V_female查询所有女生记录的信息。
SELECT *
FROM V_female;
通过视图V_average查询学生的成绩。
CREATE VIEW V_average AS
SELECT *,Grade AS '成绩'
FROM Enrollment
SELECT *
FROM V_average;