实验九 视图的使用
- 目录
- 一、实验目的
- 二、实验内容及要求
- 1.建立一视图View_CSTeacher,列出计算机系各个老师的资料(姓名、性别、职称)。
- 2.建立一视图View_Class,列出每个班级的名称、系别和班级人数。
- 3.建立一视图View_Student,列出每个学生的学号、选修课程门数和平均成绩,并按平均成绩从大到小排列。(体验在视图中使用order by。注意观察视图中数据是否实现按成绩排序?为什么?)
- 4.查询平均成绩大于85分的学生的所有信息。(要求使用视图View_Student完成查询)
- 5.修改视图View_Student(修改视图定义),列出每个学生的学号、姓名、选修课程门数和平均成绩。
- 6.要通过视图View_Student,将学号为“000503002”的平均成绩改为90分,是否可以实现?并说明原因
- 7.删除视图View_CSTeacher。
- 8.建一视图View_Studentnum,列出每个班级信息以及班级人数。
- 三、实验小结
- 1.试述视图的优点;思考基本表与视图的区别和联系。
- 2.是否所有视图都可以更新?为什么?举例说明哪些视图不能更新。
目录
数据库school有单独发,点作者的文章那里查看,谢谢。
一、实验目的
1.熟悉视图的操作。
二、实验内容及要求
用SQL语句完成下列功能。使用数据库为SCHOOL数据库。
1.建立一视图View_CSTeacher,列出计算机系各个老师的资料(姓名、性别、职称)。
CREATE VIEW View_CSTeacher
AS
SELECT Teac_name,Teac_sex,TechPost
FROM Deparment d, Teacher t
WHERE d.Depar_id=t.Depar_id and d.Depar_name='计算机系'
GO
先运行上面的,再运行下面的代码,否则报错。
SELECT *
FROM View_CSTeacher
2.建立一视图View_Class,列出每个班级的名称、系别和班级人数。
SELECT *
FROM View_Class
CREATE VIEW View_Class
AS
SELECT c.Class_name,d.Depar_name,count(s.Class_id) as '班级人数'
FROM Class c,Deparment d,Student s
WHERE d.Depar_id=c.Depar_id and s.Class_id=c.Class_id
GROUP BY c.Class_name,d.Depar_name,s.Class_id
GO
SELECT *
FROM View_Class
3.建立一视图View_Student,列出每个学生的学号、选修课程门数和平均成绩,并按平均成绩从大到小排列。(体验在视图中使用order by。注意观察视图中数据是否实现按成绩排序?为什么?)
CREATE VIEW View_Student
AS
SELECT Stu_id,COUNT(Course_id) AS 选修课程门数,AVG(Grade) as 平均成绩
FROM StudentGrade
GROUP BY Stu_id
先运行上面的代码,在运行下面的代码,否则报错
SELECT *
FROM View_Student
视图中数据并未实现按成绩排序,因为不被允许在视图中使用ORDER BY 。
4.查询平均成绩大于85分的学生的所有信息。(要求使用视图View_Student完成查询)
SELECT *
FROM View_Student
WHERE 平均成绩>85
5.修改视图View_Student(修改视图定义),列出每个学生的学号、姓名、选修课程门数和平均成绩。
ALTER VIEW View_Student
AS
SELECT sg.Stu_id,s.Stu_name,COUNT(Course_id) AS 选修课程门数,AVG(Grade) 平均成绩
FROM StudentGrade sg JOIN Student s ON sg.Stu_id=s.Stu_id
GROUP BY sg.Stu_id,Stu_name
6.要通过视图View_Student,将学号为“000503002”的平均成绩改为90分,是否可以实现?并说明原因
UPDATE View_Student
SET 平均成绩='90'
FROM View_Student
WHERE Stu_id='000503002'
对视图或函数 ‘View_Student’ 的更新失败,因其包含派生域(或常量域)
7.删除视图View_CSTeacher。
DROP VIEW View_CSTeacher
8.建一视图View_Studentnum,列出每个班级信息以及班级人数。
CREATE VIEW View_Studentnum
AS
SELECT c.*,count(s.Stu_id) as 学生人数
FROM Class c,Student s
WHERE c.Class_id=s.Class_id
GROUP BY c.Class_id,c.Class_name,c.Depar_id,c.Director,c.Monitor
SELECT *
FROM View_Studentnum
三、实验小结
1.试述视图的优点;思考基本表与视图的区别和联系。
视图的优点:
1.视点集中
2.简化操作
3.定制数据
4.合并分割数据
5.安全
视图是一个或多个表依照某个条件组合而成的虚拟集。
2.是否所有视图都可以更新?为什么?举例说明哪些视图不能更新。
并非所有视图都可以更新。比如题目6,含有更新的数据中含有派生域或者常量域是不能更新的。