您的位置:首页 > 数据库

数据库实验三 索引与视图

2014-11-25 22:35 309 查看
实验三 索引和视图

一、 实验目的

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

自动化

自动化

计算机

数学

数学

数学

课程表: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

学生选修表: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

2.索引的建立、删除

①用SSMS的方式为Student表按Sno(学号)升序建唯一索引

②用T—SQL语句为Course表按Cno(课程号)升序建唯一索引,

③用T—SQL语句为SC表按Sno(学号)升序和Cno(课程号)号降序建唯一索引。

④能否用T—SQL语句再为表Students的Sname(姓名)和Sno(学号)列上建立一个聚簇索引?若不能说明原因?

⑤用T—SQL语句删除基本表SC上的唯一索引。

3.用T—SQL完成如下视图的建立、查询、修改及删除

1)建立数学系学生的视图C_Student,并要求进行修改和插入操作时仍需保证该视图只有数学系的学生,视图的属性名为Sno,Sname,Sage,Sdept。

2) 用SSMS的方式建立学生的学号(Sno)、姓名(Sname)、选修课程名(Cname)及成绩(Grade)的视图Student_CR。

3) 定义一个反映学生出生年份的视图Student_birth(Sno, Sname, Sbirth)。

4)建立先修课程为空的课程视图v_course

5) 建立成绩高于90分的女生成绩视图v_F_grade(包括学号,姓名,课程号及成绩列)

6)建立视图S_AVGAGE(其中包括性别SSEX与平均年龄AVG_AGE两列)用以反映男生、女

生的平均年龄

7)对前面创建的视图S_AVGAGE执行更新操作:

UPDATE S_AVGAGE

SET AVG_AGE = 85

WHERE ssex = '女'

上述语句能否成功执行?为什么?

8) 在数学系的学生视图C_Student中找出年龄(Sage)小于20岁的学生姓名(Sname)和年龄

(Sage)。

9) 在Student_CR视图中查询成绩在85分以上的学生学号(Sno)、姓名(Sname)和课程名称

(Cname)。

10) 将数学系学生视图C_Student中学号为S05的学生姓名改为“黄海”。

11) 向数学系学生视图C_Student中插入一个新的学生记录,其中学号为“S09”,姓名为“王海”,年龄为20岁。

12) 删除数学系学生视图C_Student中学号为“S09”的记录。

执行代码

CREATE DATABASE 学生选课数据库

ON PRIMARY

(NAME=学生选课数据库_data,

FILENAME='D:\包春春\实验三\学生选课数据库_data.mdf',

SIZE=10,

MAXSIZE=100,

FILEGROWTH=10)

LOG ON

(NAME=学生选课数据库_log,

FILENAME='D:\包春春\实验三\学生选课数据库_log.ldf',

SIZE=20,

MAXSIZE=200,

FILEGROWTH=10)

CREATE TABLE Student

(Sno CHAR(9) PRIMARY KEY,

Sname CHAR(20) NOT NULL UNIQUE,

Ssex CHAR(2)CHECK(Ssex IN('男','女')),

Sage INT CHECK(Sage>15 AND Sage<30),

Sdept CHAR(20));

CREATE TABLE Course

(Cno CHAR (5) PRIMARY KEY,

Cname CHAR(30),

Cpno CHAR(5),

Credeit INT);

CREATE TABLE SC

(Sno CHAR(9),

Cno CHAR(5),

Grade INT CHECK(Grade>0 AND Grade<100)

PRIMARY KEY (Sno,Cno),

FOREIGN KEY(Sno) REFERENCES Student(Sno),

FOREIGN KEY(Cno) REFERENCES Course(Cno));

INSERT

INTO Student

VALUES('S01','王建平','男','21','自动化'),

('S02','刘华','女','19','自动化'),

('S03','范林军','女','18','计算机'),

('S04','李伟','男','19','数学'),

('S05','黄河','男','18','数学'),

('S06','长江','男','20','数学');

INSERT

INTO Course

VALUES('C01','英语','NULL','4'),

('C02','数据结构','C05','2'),

('C03','数据库','C02','2'),

('C04','DB_设计','C03','3'),

('C05','C++','NULL','3'),

('C06','网络原理','C07','3'),

('C07','操作系统','C05','3');

INSERT

INTO SC

VALUES('S01','C01','92'),

('S01','C03','84'),

('S02','C01','90'),

('S02','C02','94'),

('S02','C03','82'),

('S03','C01','72'),

('S03','C02','90'),

('S04','C03','75');

CREATE UNIQUE INDEX Stusno ON Student(Sno);

CREATE UNIQUE INDEX Coucno ON Course(Cno);

CREATE UNIQUE INDEX SCno ON SC(Sno ASC,Cno DESC);

CREATE CLUSTERED INDEX Snamesno ON Student(Sname,Sno)

DROP INDEX SC.SCno;

CREATE VIEW C_Student(Sno,Sname,Sage,Sdept)

AS

SELECT Sno,Sname,Sage,Sdept

FROM Student

WHERE Sdept='数学'

WITH CHECK OPTION;

CREATE VIEW Student_birth(Sno, Sname, Sbirth)

AS

SELECT Sno, Sname,2014-Sage

FROM Student;

CREATE VIEW v_course

AS

SELECT *

FROM Course

WHERE Cpno=NULL;

CREATE VIEW v_F_grade(Sno,Sname,Cno,Grade)

AS

SELECT Student.Sno,Sname,SC.Cno,Grade

FROM Student,Course,SC

WHERE Student.Sno=SC.Sno AND Course.Cno=SC.Cno AND Ssex='女' AND Grade>90

CREATE VIEW S_AVGAGE(Ssex,AVG_AGE)

AS

SELECT Ssex,AVG(Sage)

FROM Student

GROUP BY Ssex;

CREATE VIEW Student_CR(Sno,Sname,Cname,Grade)

AS

SELECT Student.Sno,Sname,Cname,Grade

FROM Student,Course,SC

WHERE Student.Sno=SC.Sno AND Course.Cno=SC.Cno;

UPDATE S_AVGAGE

SET AVG_AGE=85

WHERE Ssex='女';

SELECT Sage,Sname

FROM C_Student

WHERE Sage<20;

SELECT Sno,Sname,Cname

FROM Student_CR

WHERE Grade >85;

UPDATE C_Student

SET Sname='黄海'

WHERE Sdept='数学' AND Sno='S05';

INSERT

INTO C_Student(Sno,Sname,Sage,Sdept)

VALUES('S09','王海','20','数学')

DELETE

FROM Student

WHERE Sno='S09' AND Sdept='数学';
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐