视图

来源:互联网 发布:妮维雅舒安系列 知乎 编辑:程序博客网 时间:2024/06/03 19:20

视图

1、简单的说,视图可以看成是一个窗口,它所反映的是一个表或若干表的局部数据。视图一经定义,用户就可以把它当做表一样来查询数据
2、视图和基本表不同,视图是一个虚表,即视图储存的是查询语句 而不是查询结果
3、视图是定义在基本表上的,也可以定义在视图上;一个视图可在几个表或视图上建立,一个表或视图也可以建立多个视图。


视图定义

create [or replace] view <视图名>     as <子查询>;

栗子:建立计算机系的学生视图xs_dept_view

create or replace view xs_dept_viewas select * from xs where dept='计算机';

这里写图片描述

视图保存的是这条 select 语句 ,不管数据库如何变化 ,每次执行这条语句的时候 都反映的是当前数据库的状态。

这里写图片描述


栗子2:把学生的学号及它的平均成绩定义为视图cj_avg_view;

create or replace view cj_avg_view(sno,avg_grade) asselect sno,avg(grade) from cjgroup by sno;

该栗子中视图取名时取了avg_grade 列名 ,而在栗子1中,没有取列名?
因为在选择语句中 条件项 avg(grade)是计算列,所以必须在取名时要给计算列取别名(列名)。


视图的使用

我们在创建视图时,所做的是存放select语句。用户使用时所使用的是视图所存放的sql语句
以上两个视图的使用

select * from xs_dept_view;

返回的是计算机系所有学生的信息

这里写图片描述

select * from cj_avg_view;

返回的是视图储存的选择语句中学生成绩表中 sno学号 和avg平均成绩
这里写图片描述

栗子:求平均成绩为90分以上的学生的学号和成绩?

select * from cj_avg_viewwhere avg_grade>90;

把cj_avg_view 视图当做基本表来查找数据。

这里写图片描述


视图的更新


对视图的更新最终要转化成对基本表的更新,实际上并不是所有的视图都是可以更新的,有些视图的更新不能唯一的有意义的转化成对基本表的更新。

栗子:将学号为 001101的平均成绩改为90

update cj_avg_view set avg_grade=90where sno='001101';

这里写图片描述

返回的是一个错误的报告 非法操作。

在原表中只有grade列

这里写图片描述

而字段avg_grade是对应到函数avg(grade),是在原表grade中求avg,而在原表中没有avg列。原表有的字段可以进行增删改查。


视图的删除

drop view<视图名>;
drop view xs_dept_view;drop view cj_avg_view;
原创粉丝点击