在本教程中,将了解视图以及如何管理视图,包括:创建新视图,删除视图以及通过视图更新基础表的数据。
使用SELECT语句查询一个或多个表中的数据时,将获得结果集。
例如,以下语句返回products
和 brands
表中所有产品的产品名称,品牌和价格:
SELECT product_name, brand_name, list_price FROM production.products p INNER JOIN production.brands b ON b.brand_id = p.brand_id;
下次,如果要获得相同的结果集,可以将此查询语句保存到文本文件中,打开它,然后再次执行。
SQL Server提供了一种通过视图将此查询保存在数据库目录中的更好方法。
视图是存储在数据库目录中的命名查询,允许客户端在之后引用它。
因此,上面的查询可以使用CREATE VIEW语句存储为视图,如下所示:
CREATE VIEW sales.product_info AS SELECT product_name, brand_name, list_price FROM production.products p INNER JOIN production.brands b ON b.brand_id = p.brand_id;
稍后,可以像SELECT
表一样引用SELECT
语句中的视图,如下所示:
SELECT * FROM sales.product_info;
收到此查询时,SQL Server执行以下查询:
SELECT * FROM ( SELECT product_name, brand_name, list_price FROM production.products p INNER JOIN production.brands b ON b.brand_id = p.brand_id; );
根据定义,视图不存储除索引视图之外的数据。
视图可以包含来自使用连接的多个表的列,也可以只包含单个表的列的子集。 这使得视图对于抽象或隐藏复杂查询很有用。
下图说明了包含多个表中列的视图:
一般来说,视图有以下优点:
安全
您可以限制用户直接访问表,并允许他们通过视图访问数据子集。
例如,可以允许用户通过视图访问客户姓名,电话,电子邮件,但限制他们访问银行帐户和其他敏感信息。
简单
关系数据库可以具有许多具有复杂关系的表,例如,一对一和一对多使得难以导航。
但是,可以使用一组视图简化具有连接和条件的复杂查询。
一致性
有时,需要在每个查询中编写复杂的公式或逻辑。为了使其一致,可以隐藏视图中的复杂查询逻辑和计算。
定义视图后,可以从视图中引用逻辑,而不是在单独的查询中重写它。
在SQL Server中管理视图的相关主题如下 -
DROP VIEW
语句从数据库中删除一个或多个视图。