SQL视图

视图创建

CREATVIEW 视图名 列名

AS 子查询

[WITHCHECK OPTION]

[WITH CHECK OPTION]:

当用视图进行UPDATE\INSERT\DELETE 进行更新、插入、删除时的行需要满足子查询

子查询可以是任意SELECT语句

视图的属性列名可以全部省略或指定

1.全部省略的话由子查询中SELECT中列的诸字段组成。

2.明确指定试图的所有列名的话:

某个目标列是聚集函数或列表达式

多表连接时选出几个同名列作为视图的字段

需要在视图中为某个列启用新的更适合的名字

关系数据库管理系统执行CREATE VIEW语句中,只是将视图存入字典,不执行SELECT语句。

行列子集视图:从一个表中导出,但是只保留了一些行一些列。比如IS_Student为行列子集视图。

CREATEVIEW IS_Student

AS

SELECTSno,Sname,Sage

FROMStudent

WHERESdept= ‘IS’

WITHCHECK POTION  插入、删除、更新数据时都只能是IS系的学生

 

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

CREATEVIEW IS_S1 (Sno,Sname,Grade)

AS

SELECTStudent.Sno,Sname,Grade

FROMStudent,SC

WHERESdept=’IS’AND

      Student.Sno=SC.Sno AND

      SC.Cno=’1’

基于视图的视图:求建立信息系选修了1号课程的学生,且成绩大于90的学生

CREATEVIEW IS_S2

AS

SELECT Sno,Sname,Grade

FROMIS_S1

WHEREGrade>=90

基于表达式的视图:

分组视图:

将学生的学号和平均成绩定义为一个视图

CREATEVIEW S_G(Sno,Grade)

AS

SELECTSno,(AVG)Grade

FROMSC

GROUPBY Sno

视图定义时不建议用*,防止来源表发生改变,视图不能一致。

视图删除:DROP VIEW 视图名[CASCADE]

CASCADE可选,可以将该视图导出的所有视图一并删除。

查询视图 

用户角度:查询视图与查询基本表相同

数据库管理系统:视图消解法:有效检查、转化等价基本表、修正后查询

SELECTSno,Sage

FROMIS_Student

WHERESage<20

 

转化为: SELECTSno,Sage

         FROM Student

         WHERE Sdept=’IS’ AND Sage<20

 

视图消解法也有局限性,不能生成新的视图

SELECT*

FROMS_G

WHEREGavg>=90

 

SELECTSno,AVG(Grade)

FROMSC

GROUPBY Sno

HAVINGAVG(Grade)>=90

 

SELECT*

FROM(SELECT Sno,AVG(Grade)

FROMSC

GROUPBY Sno) AS S_G(Sno,Gavg)

WHEREGavg>=90

更新视图

将信息系学生视图IS_         Student中学号201215122的学生姓名改为“刘辰“

UPDATEIS_Student

SETSname=’刘辰‘

WHERESno=’201215122’

 

UPDATEStudent

SETSname=’刘辰‘

WHERESno=’201215122’ AND Sdept=’IS’

插入视图

INSERT

INTOIS_Student

VALUES(‘201215122’,’赵新’,20,’IS’)

删除201215122

DELEAT

FROMIS_Student

WHERESno=’201215129’

一些视图是不能更新的,因为对视图的更新不能唯一地有意义地转换成对基本表的更新。比如平均成绩不能更新。行列子集视图进行更新。不能更新的视图定义的视图也不能更新。

 

 

 

阅读更多
文章标签: SQL
个人分类: 数据分析 sql
上一篇SQL数据查询
下一篇SQL空值处理
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭