数据库实验三 索引与视图

                                                              实验三  索引和视图

 

一、 实验目的

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,并要求进行修改和插入操作时仍需保证该视图只有数学系的学生,视图的属性名为SnoSnameSageSdept

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='数学';
  
   
 



 

你可能感兴趣的:(数据库)