视图

来源:互联网 发布:淘宝买家要求花呗 编辑:程序博客网 时间:2024/05/23 22:17

视图是虚表,是从一个或几个基本表(或视图)中导出的表,在系统的数据字典中仅存放了视图的定义,不存放视图对应的数据。
视图是原始数据库数据的一种变换,是查看表中数据的另外一种方式。可以将视图看成是一个移动的窗口,通过它可以看到感兴趣的数据。 视图是从一个或多个实际表中获得的,这些表的数据存放在数据库中。那些用于产生视图的表叫做该视图的基表。一个视图也可以从另一个视图中产生。
视图的定义存在数据库中,与此定义相关的数据并没有再存一份于数据库中。通过视图看到的数据存放在基表中。
视图看上去非常像数据库的物理表,对它的操作同任何其它的表一样。当通过视图修改数据时,实际上是在改变基表中的数据;相反地,基表数据的改变也会自动反映在由基表产生的视图中。由于逻辑上的原因,有些视图可以修改对应的基表,而有些则不能(仅仅能查询)。

一、视图的创建:

1 创建信息系学生信息的视图 (is_view) ;
create view is_view(sno,sname,ssex,sage,sdept)
as
select *
from student
where sdept='IS';

2 创建信息系选修了1号课程的学生的视图;
create view is_1_view(sno,sname,ssex,sage,sdept)
as
select student.*
from student,sc
where student.sdept='IS' and sc.sno=student.sno and sc.cno=1;

3 建立信息系选修了1号课程且成绩在90分以上的学生的视图;
create view cs_1_90_view(sno,sname,ssex,sage,sdept)
as
select student.*
from student,sc
where student.sdept='IS' and sc.sno=student.sno and sc.cno=1 and sc.grade>90;

4 创建一个反映学生出生年份的视图
create view birth_view (sno,birth)
as
select sno,Year(GetDate())-sage
from student;

5 将所有女生的记录定义为一个视图;

create view nv_view(sno,sname,ssex,sage,sdept)
as
select *
from student
where ssex='女';
6 将所有学生的学号和他的平均成绩定义为一个视图S_G。
create view S_G(sno,savg)
as
select sno,avg(grade)
from sc
group by sno;

二、 视图结构的修改:

1 将视图 is_view 修改为信息系的所有女生的视图;
drop view is_view;

create view is_view(sno,sname,ssex,sage,sdept)
as
select *
from student
where sdept='IS' and ssex='女';
或者
alter view is_view
as
select sno,sname,ssex,sage,sdept
from student
where sdept='IS' and ssex='女';
 
三、查询视图

1 在信息系的学生视图中查询年龄小于20岁的学生:
select sno
from is_view
where sage<20;

2 查询信息系选修了1号课程的学生:

select sno
from is_1_view;
3 在视图S_G中查询平均成绩在90分以上的学生的学号和平均成绩:
select sno,savg
from S_G
where savg>90;

四、更新视图:

1 将信息系学生视图is_view中学号为“95002”学生姓名改为”刘辰”;

update is_view
set sname='刘辰'
where sno=95002;

2 向信息系学生视图is_view中插入一个新的学生记录, 学号为95029,姓名为”赵新”, 年龄为20岁;
insert
into is_view(sno,sname,ssex,sage,sdept)
values(95029,'赵新','男',20,'IS');

3 删除信息系学生视图is_view中学号为95004的学生的记录。
delete
from is_view
where sno=95004;
五、删除视图

1 删除视图is_view
drop view is_view;


另外视图表的查询和普通表的查询没有区别,视图表的更新会有一些限制。

由于视图是基于基本表的虚表,所以当基本表变化时视图也会跟着更新,因此一些复杂的连表查询可以直接把需要的数据生成一个视图


0 0