SQL笔记7.视图

视图就是一种有命名的导出来的表,没有物理储存,除了物化视图
①定义视图 
CREATE VIEW <视图名> [<列名>,...,<列名>]
AS <查询表达式>
[WITH CHECK OPTION]
且其中SELECT查询表达式不包含DISTINCT和ODRDER BY
而后面的WITH CHECK OPTION是关于这个视图可不可一更新的定义

在以下情况必须指定属性列名
1.SELECT 子句目标列中包含聚集函数或者列表达式
2.SELECT子句目标列是*
3.多表连接时出现了同名属性列
4.需要为视图中某个列重新命名

举例
CREATE VIEW SE_Students
AS SELECT Sno,Sname,Sex,Brithday,Dno
FROM Stduents
WHERE Speciality = '软件工程'
WITH CHECK OPTION
这个就是创建一个有Sno,Sname,Sex,Brithday,Dno的名字叫SE_Students的视图
其中的数据再Students中软件工程的Speciality的元组中找,可以更新视图

再举例
CREATE VIEW EI_SC(Sno,Cno,Grade)
AS SELECT *
FROM SC
WHERE Sno IN 
(SELECT Sno 
FROM Students
WHERE Dno = 'IE');
这个触犯了第二条,所以列出了属性(Sno,Cno,Grade)

还有两个例子
CREATE VIEW Students_Grades(Sno,Sname,Cname,Grade)
AS SELECT S.Sno,Sname,Cname,Grade
FROM Students S,SCC,Courses C
WHERE S.Sno = SC.Sno AND
C.Cno = SC.Cno;
 创建了一个视图
然后我们
CREATE VIEW CS_Student_Gradew(Sno,Sname,Cname,Grade)
AS SELECT S.Sno,Sname,Cname,Grade
FROM Students S,Students_Grades SG
WHERE S.Sno = SG.Sno AND
Speciality = '即可';
就是基于视图创建视图
如果查询表达式中使用了聚集函数,那就叫聚集视图
CREATE VIEW Student_Avg_Grades(Sno,Sname,Avg_Grades)
AS SELECT S.Sno,Sname,AVG(Grade)
FROM Students S, SC
WHERE S.Sno = SC.Sno
GROUP BY S.Sno,Sname;

②删除视图
删除视图是直接把视图的定义从数据字典里面删除,
DROP VIEW <视图名> [CASCADE|RESTRICT]
后缀时关于级联删除和限制删除的定义
比如DROP VIEW Students_Grade 或者DROP VIEW Students_avg_grade RESTRICT(缺省的时候为RESTRICT)
这个时候就叫限制删除,这个时候就不能删除,因为Students_avg_grade是用Students_grade中的数据创造的
而当我们DROP VIEW Students_Grade 的时候这时候,我们就是级联删除,这个时候我们也会把Students_avg_grade一起删除,之外的所有县官的全部删除

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值