【SQL Server学习笔记】11:视图和公用表表达式

来源:互联网 发布:alchemy软件 编辑:程序博客网 时间:2024/06/05 16:40

视图

视图是基于结果集的可视化的表,用于简化查询,对视图的操作不会影响到数据库本身。
①创建视图

CREATE VIEW 视图名 ASSELECT 列名表FROM 源表名

例如:

create view MyView asselect Cno,CName,Credit from Course

可以看到在视图中多了一个文件:
这里写图片描述
查看一下:
这里写图片描述

②删除视图

DROP VIEW 视图名

删除后可以刷新对象资源管理器看到视图已经被删除了。

③视图的更新

sp_refreshview 视图名

因为视图是基于表的,这相当于使用存储过程来刷新了视图。

(1)如果添加一个列,因为这个列必然不在视图创建时要求的列中(即便创建时使用了*,也只表示那个时候的全部,并不包括这个列),是不会对视图有影响的。
但是,如果你使用*的初衷不是为了只使用当前表中全部的列,还希望当表增加新的列时视图也能增加,这时候就需要去更新视图了。

create view MyView asselect * from Coursealter table Course add XinDe char(10)sp_refreshview MyViewselect * from MyView

这里写图片描述

(2)因为视图来自表,所以在表中删除了视图中使用了的列(这时候没问题,因为视图不影响表),在查看视图时会报错,即便查看的仅是没删除的列。这时候就需要刷新视图。

alter table Course drop column XinDeselect CName from MyView

这里写图片描述
刷新视图,去查看全部列也没问题了,这时的全部当然不会包括删掉的那个列。

sp_refreshview MyViewselect * from MyView

这里写图片描述

(3)对于原表中的数据进行了更改,则视图会自动更新。

create view MyView asselect Cno,CName,Credit from Courseupdate Course set Credit=7 where Cno=1select * from MyView

这里写图片描述

公用表表达式

前面学的视图是作为数据库对象存储在数据库中的,如果这个结果集仅仅要使用一次,那么建立视图就太奢侈了。
公用表表达式(Common Table Expression)将查询结果指定一个临时命名的名字。

WITH 公用表名 [(自定列名表)] AS(SELECT...)

注意,公用表表达式只能且必须在后面的一个SELECT/INSERT/UPDATE/DELETE/MERGE语句中使用,但这条语句未结束时可以多次使用,结束后就失效了。

例如:

with ok(ok1,ok2) as (select CName,Credit from Course)select * from ok

这里写图片描述
这里只说了公用表表达式的非递归使用,实际上它还可以递归使用,以后再学。

阅读全文
0 0
原创粉丝点击