视图(3.7)

一、定义视图

CREATE VIEW <视图名> [列名,列名,列名]
AS
SELECT<子查询>
[WITH CHECK OPTION]
1、属性列名
  1. 要么全部省略或者全部指定
  2. 有三种情况必须明确指定组成视图的所有列名(目标列不是单纯的列名,有同名字段,在视图中启用新的名字)
2、WITH CHECK OPTION

对视图进行操作时,要保证满足子查询中的条件

3、例子
1)行列子集视图

视图是从单个基本表中导出的,去掉了基本表的某些行,但是保留了主码

CREATE VIEW IS_Student(Sno,Sname,Sage)
AS
SELECT Sno,Sname,Sage FROM Student
WHERE Sdept='IS';
1)建立在多个表上

建立信息系选修1号课程学生的视图

CREATE VIEW IS_SI[Sno,Sname,Grade]
ON
SELECT Student.Sno,Sname,Grade
FROM Student,SC
WHERE Student.Sno=SC.Sno AND Sdepet='SI' AND SC.Cno='1';
2)带虚拟列的视图(带表达式的视图)
CREATE VIEW BT_S(Sno,Sname,Sbirth)
AS
SELECT Sno,Sname,2019-Sage
FROM Student
3)分组视图

带有聚集函数和GROUP BY的子句来查询定义视图

CREATE VIEW S_G(Sno,Gagv)
AS 
SELECT Sno,AVG(Grade) 
FROM SC 
ORDER BY Sno
4)子查询SELECT*

子查询是由“SELECT*”建立的,F_Student的属性列和Student的属性列一一对应,如果Student表的结构改变,相当于破坏映像关系,该视图不能正常工作

CREATE VIEW F_Student(F_sno,name,sex,age,dept)
AS
SELECT * 
FROM Student
WHERE Ssex='女';

二、删除视图

1、删除格式

基本表删除后,由基本表导出的视图均无法用了,但是视图的定义没有从字典中删除,删除视图需要显示的使用DROP VIEW 语句

DROP VIEW <视图名>[CASCADE]
2、级联删除

删除视图IS_S1和和由IS_S1导出的所有视图

DROP VIEW IS_S1 CASCADE

三、查询视图

1、视图消解(view resolution)

1)有效性检查
2)从数据字典中取出视图的定义,把定义中的子查询和用户的查询结合起来,转换成等价的对基本表的查询,然后再执行修正了的查询

2、生成派生表

派生表只是在语句执行时临时定义,语句执行后该定义即被删除

SELECT *
FROM (SELECT Sno,AVG(Grade)
FROM SC
GROUP BY Sno) AS S_G(Sno,Gavg)
WHERE Gavg>=90;

四、视图的作用

  1. 视图能够简化用户的操作
  2. 视图使得用户以多种角度看待同一数据
  3. 视图对重构数据库提供一定程度的逻辑独立性
  4. 视图能够对机密数据提供保护
  5. 适当利用视图可以清晰的表达查询
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值