什么是视图?
在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表。
视图是存储在数据库中的查询的sql 语句,您可以向视图添加 SQL 函数、WHERE 以及 JOIN 语句,也可以呈现数据,就像这些数据来自于某个单一的表一样。
视图只供查询,数据不可更改,视图中的字段就是来自一个或多个数据库中的真实的表中的字段。将多个数据表中的字段组合成一个“虚拟表”,查询其字段时可直接select * from 视图名。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。
视图的使用场景
视图的出现主要基于两个原因:安全原因,视图可以隐藏一些数据,仅显示需要查询的字段,另一原因是简化sql,可使复杂的中间表关联查询更易于使用和展示。
创建视图语法
CREATE VIEW view_name视图名称 AS
SELECT column_name(s)
FROM table_name
WHERE condition
*注释:视图总是显示最新的数据!每当用户查询视图时,数据库引擎通过使用视图的 SQL 语句重建数据。*
示例:
测试表:usera有id,name,age字段
测试表:userb有id,name,sex字段
如果直接使用sql语句:select * from user;那就会提示该表不存在,这时该如何解决呢?答案:创建视图。以下sql语句创建视图:
create view user as select a.name,a.age,b.sex from usera as a, userb as b where a.name=b.name;
以上假设name都是唯一的。此时使用sql语句:select * from user;就不会报错。
更新视图语法
CREATE OR REPLACE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
现在,我们希望向 “Current Product List” 视图添加 “Category” 列。我们将通过下列 SQL 更新视图:
CREATE VIEW [Current Product List] AS
SELECT ProductID,ProductName,Category
FROM Products
WHERE Discontinued=No
注意:如果视图中包含对其采用的表的字段值进行了另外的计算,或属性的性质不相同,则无法对视图进行更改,这是一种视图机制。
删除视图语法
DROP VIEW view_name
视图删除后视图的定义将从数据字典中删除,如果在该视图上还导出了其他视图,删除这些视图需要级联删除,遗憾的是,SQL Server2008并不支持级联删除,不过可以先删除子视图,然后再删除母视图。