一、学习目的

加深对视图的理解,熟练视图的定义、查看、修改等操作

二、实验环境

 Windows 11

Sql server2019

三、实验内容 

学生(学号,年龄,性别,系名)

课程(课号,课名,学分,学时)

选课(学号,课号,成绩)

(1)根据上面基本表的信息定义视图显示每门课的课名、选课人数、平均成绩

(2)观察基本表数据变化时,视图中数据的变化。

(3)利用视图,查询平均成绩最高的学生。

四、SOL代码

(1)根据上面基本表的信息定义视图显示每门课的课名、选课人数、平均成绩

go
create view S_c(课名,选课人数,平均成绩)
as
select cname 课名,count(*) 选课人数,avg(grade) 平均成绩
from ce, xe where ce.cnum=xe.cnum
group by ce.cname
go
select * from S_c
go

数据库(4)--视图的定义和使用_子查询

(2)观察基本表数据变化时,视图中数据的变化

select * from S_c

 (3)利用视图,查询平均成绩最高的学生

create view S_grade(学生姓名,平均成绩)
as
select stu.sname,avg(grade) as'平均成绩'
from stu,xe
where stu.sno= xe.sno
group by stu.sname
go
select *from S_grade
go
select 学生姓名 from S_grade
where 平均成绩=(select max(平均成绩) from S_grade)

 五、结果分析

SQL语言用CREATE VIEW命令建立视图,其格式为:
CREATE VIEW <视图名> [(<列名> [,<列名>] …)]
AS<子查询>
[WITH CHECK OPTION] ;
其中,子查询可以是任意的SELECT语句,是否可以含有ORDER BY子句和DISTINCT短语,则取决于具体系统的实现;WITH CHECK OPTION表示对视图进行UPDATE、INSERT和DELETE操作时要保证更新、插入或删除的行满足视图定义中的谓词条件(即子查询中的条件表达式)。

删除视图语句:DROP VIEW <视图名>[CASCADE];同时还有插入(INSERT),修改(UPDATE)数据。

六、小结

 组成视图的属性列名或者全部省略或者全部指定,没有第三种选择。如果省略了视图的各介属性列名,则隐含该视图由子查询中SELECT子句目标列中的诸字段组成。但在下列三种情况下必须明确指定组成视图的所有列名:
(1)某个目标列不是单纯的属性名,而是聚集函数或列表达式:

(2)多表连接时选出了几个同名列作为视图的字段:

(3)需要在视图中为某个列启用新的更合适的名字。