大白糖奶兔的Blog
大白糖奶兔的Blog
数据库第三章-视图

视图的特点:

  • 虚表,是从一个或几个基本表(或视图)导出的表
  • 数据库中只存放视图的定义,不存放视图对应点数据
  • 基表中的数据发生变化,从视图中查询出的数据也随之改变

定义视图

语句格式

create view <视图名> [(<列名>,[,<列名>]...)]
as <子查询>
[with check option]
  • with check option:是否允许对视图增删改同步到基本表的数据增删改
  • 组成视图的属性列名:全部省略或全部指定
  • DBMS执行create view只是把视图定义保存起来,并不执行其中的select语句
  • 在对视图查询时,按视图的定义从基本表中将数据查出

行列子集视图

https://yczbest.cn/wp-content/uploads/2020/08/wp_editor_md_a7bbecec643df12c03f3bba36696dc7a.jpg
create view is_Student
as
select sno,sname,sage
from student
where sdept = 'IS'
with check option;

视图列名全部省略,与select语句的属性一致

https://yczbest.cn/wp-content/uploads/2020/08/wp_editor_md_3889174c7092f4fa6d4c5753841ac321.jpg

行列子集视图:
- 在视图中指定的属性是否包含主键
- 视图中未指定,但基本表中存在的属性是否允许为null(如果允许为空,可以使用with check option,如果不允许为空,那向视图插入数据就会对非空约束破坏)

update is_student
set sname='刘辰'
where sno='201215122';
insert into is_student
values('201215129','赵新',20);
delete
from is_student
where sno='201215127';

基于多个基表的视图

https://yczbest.cn/wp-content/uploads/2020/08/wp_editor_md_959854df8c460835049b025a8d2464d8.jpg
create view is_s1(sno,sname,grade)
as
select student.sno,sname,grade
from student,sc
where sdept='IS' and student.sno=sc.sno and sc.cno='1';

这里视图的属性列全部指定,因为select语句的第一个sno有student.会一并加到视图的列名上

基于视图的视图

https://yczbest.cn/wp-content/uploads/2020/08/wp_editor_md_56a44a5fca6e34bf0191dec95bcf8343.jpg
create view is_s2
as
select sno,sname,grade
from is_s1
where grade>=90;

代表达式的视图

https://yczbest.cn/wp-content/uploads/2020/08/wp_editor_md_69e2f6d9e3b5faeb3e4047a020bfd760.jpg
create view bt_s(sno,sname,sbirth)
as
select sno,sname,2020-sage
from student;

select语句中包含表达式,在创建视图的时候一定要另起属性名

分组视图

https://yczbest.cn/wp-content/uploads/2020/08/wp_editor_md_0a3d97e9d4aa12481c29659c15351420.jpg
create view s_g(sno,gavg)
as
select sno,avg(grade)
from sc
group by sno;

删除视图

drop view <视图名> [cascade];
  • 如果该视图还导出了其他视图,使用cascade级联删除语句,把该视图和导出的视图一起删除
  • 删除基表时,由该基表导出的所有视图定义都必须显式使用drop view语句删除
https://yczbest.cn/wp-content/uploads/2020/08/wp_editor_md_8f313d00117c5c50d637872bec4ec545.jpg
drop view bt_s;

查询视图

https://yczbest.cn/wp-content/uploads/2020/08/wp_editor_md_8dd6d686b384d778e76c0c0b1ab4286f.jpg
select sno,sage
from is_student
where sage < 20;
https://yczbest.cn/wp-content/uploads/2020/08/wp_editor_md_7cfa9d9241bfec486869101690f77781.jpg
select is_student.sno,sname
from is_student,sc
where is_student.sno=sc.sno and sc.cno = '1';

视图的作用

  • 简化查询:简化了语句长度,但是不能提高效率

https://yczbest.cn/wp-content/uploads/2020/08/wp_editor_md_e033c02ae23800bd8f769e260a32c59c.jpg

如果用相关子查询

select sno,cno
from sc x
where grade >= (select avg(grade)
from sc y
where y.sno = x.sno
);

简化之后
创建视图

create view avg_grade(sno,avg_grade)
as
select sno,avg(grade)
from sc
group by sno;

利用视图查询

select sc.sno,sc.cno
from sc avg_grade
where sc.sno = avg_grade.sno and sc.grade >= avg_grde.avg_grade;
  • 数据保密
https://yczbest.cn/wp-content/uploads/2020/08/wp_editor_md_a640356d568701402a175b43df033a3e.jpg
create view v_student_is
as
select *
from student
where sdept='IS';

数据的三级模式和两级影像

数据库的三级模式分为
- 模式:所有关系的模式(也就是所有表的定义),一个数据库只有一个模式
- 外模式:也称为子模式或用户模式
外模式对应于视图
一个数据库可以有多个外模式
- 内模式:数据库的物理结构和存储方式
物理结构指组成数据库的操作系统文件
存储方式:如 索引
一个数据库只有一个内模式

https://yczbest.cn/wp-content/uploads/2020/08/wp_editor_md_001fb3f83aaa5bd148ca1603d3aa9d54.jpg

发表评论

textsms
account_circle
email

大白糖奶兔的Blog

数据库第三章-视图
视图的特点: 虚表,是从一个或几个基本表(或视图)导出的表 数据库中只存放视图的定义,不存放视图对应点数据 基表中的数据发生变化,从视图中查询出的数据也随之改变 定义视图 语…
扫描二维码继续阅读
2020-08-12
Title - Artist
0:00