SQL视图

视图

视图是一个或几个基本表(或视图)导出的表,与基本表不同,是一个虚表
数据库中只存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中,一旦基本表中的数据发生变化,从视图中查询出的数据也随之改变。

定义视图

  • 创建视图
Create view zb_s
as
Select sno, sname, birth, college 
from s
where college ='植保'
  • 删除视图
    该语句从数据字典中删除指定的视图定义
    视图删除之后,由该视图导出的其他视图定义仍然在字典中,但已不能使用,必须使用语句删除。删除基本表之后,由该基本表导出的所有视图定义也都必须使用语句删除
drop view <视图名>;
  • 行列子集视图
    一个视图是从单个基本表导出,只是去掉了某些行和列,但保留了主码
  • with check option的视图
    透过该视图进行的更新操作要符合where的条件
    比如下面的例子中,如果插入一个college属性值不为‘信息’的学生,则会操作失败
    使用update语句也要在修改之后能够被该视图查出来,否则失败
    当查询语句中没有where语句时使用with check option是多余的
Create view xx_s
as
Select sno, sname, birth, college 
from s
where college ='信息'
with check option;
  • 基于视图的视图
    from子句中选择视图即可
create view sj_sc2 
as
select sno, sname, grade
from sj_sc
where grade>90;
  • 带表达式的视图
create view s_age(sno, sname, sage) 
as
select sno, sname, 2021-year(sbirth)
from s;
  • 建立分组视图
create view sc_avg_grade(sno, gavg)
as
select sno, avg(grade)
from sc
group by sno;

查询视图

视图定义以后,用户可以像对基本表一样对视图进行查询

  • 视图消解:将用户执行的对视图的查询,在DBMS内部转换成对导出视图的基本表的查询

原语句:

select sno, sbirth
from zb_s
where sbirth>str_to_date('1994-01-01', '%y-%m-%d')

视图的定义

create view xx_s
as
select sno,sname,birth,college 
from s
where college= '信息';

视图消解后

select sno, birth
from s
where college='信息' and
birth>to_date('1994/01/01', 'yyyy/mm/dd');

更新视图

通过视图对数据进行增删改,由于视图是虚表,更新最终要转换成对基本表的更新,同样也使用了视图消解的原理。
更新语句

update xx_s
set sname='张三'
where sno='04003';

视图的定义

create view xx_s
as
select sno,sname,birth,college
from s
where college='信息';

视图消解后

update s
set sname='张三'
where sno='04003' and college='信息'

并不是所有的视图都是可更新的,对有些视图的更新不能唯一地有意义地转换成相对应基本表的更新
一般行列子集视图是可更新的
比如以下案例中修改学生平均成绩,就会报错:

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

update sc_avg_grade 
set gavg=90
where sno='04001';

视图的作用

  • 简化用户的操作
  • 对重构数据库提供了一定程度的逻辑独立性
    在下图情况下,若原数据库重构,通过建立不同的视图,可以使外模式保持不变,从而对原表的查询程序不必修改
    请添加图片描述
    请添加图片描述
  • 视图能够对机密数据提供安全保护
  • 适当利用视图可以更清晰地表达查询
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值