什么是试图
试图(View)是一种虚拟的表,它与包含数据的表没有物理上的差异。试图仅包含从基础表中检索出的行列,因此具有与物理表相同的数据。试图是在数据库中的一个虚拟表,是基于 SQL select 语句的结果集。试图包含行和列,就像普通的表一样,但不像表那样,在数据库中存在实际的数据。
试图的优势
试图的优点之一是它们提供了灵活性和安全性。通过创建试图,您可以选择要包含的列,不包括某些列,计算值或将多个列组合在一起。另外,在试图上分配权限可仅允许用户修改或插入数据的特定列或行。这可使许多用户能够在同一表上操作,而不会互相影响。
MSSQL中创建试图
创建基于单个表的试图
我们可以用 MSSQL 中的 CREATE VIEW 语句来创建试图。在以下示例中,我们使用一张名为“employees”的表,该表中包含有关公司员工的所有信息。
CREATE VIEW employee_info AS
SELECT id, name, e_address, city
FROM employees
在上面的查询中,我们仅选择了基本表中的四列,并将查询结果存储在名为“employee_info”的试图中。
创建基于多个表的试图
CREATE VIEW 语句还可以用于基于多个表创建试图。在以下示例中,我们将创建一个试图来显示订单和订单行项目的详细信息。
CREATE VIEW order_details AS
SELECT orders.order_id, customers.customer_id, customers.customer_name, order_lines.product_id, order_lines.quantity
FROM orders
JOIN customers ON orders.customer_id = customers.customer_id
JOIN order_lines ON orders.order_id = order_lines.order_id
在上面的查询中,我们使用 JOIN 命令将三张表合并在一起,并且只将查询结果中所需的列放入试图中。
创建实时试图
实时视图是基于 select 查询的结果创建的试图,这些试图将在查询结果每次发生更改时更新。
CREATE VIEW 语句的 WITH SCHEMABINDING 选项可用于创建实时试图。在以下示例中,我们使用 WITH SCHEMABINDING 选项创建了一个名为“most_viewed_products”的试图,它显示了有关每个产品以及每个产品的浏览量和商品类别的详细信息。
CREATE VIEW most_viewed_products
WITH SCHEMABINDING
AS
SELECT products.product_id, products.product_name, categories.category_name, COUNT(*) AS views
FROM products
JOIN categories ON products.category_id = categories.category_id
JOIN page_views ON products.product_id = page_views.product_id
GROUP BY products.product_id, products.product_name, categories.category_name
在上面的查询中,我们可以看到 WITH SCHEMABINDING 选项,它定义视图与基础表的结构绑定在一起,因此试图不能包含任何无效数据,同时也不能更改我们所依赖的基表的结构。
结论
MSSQL 中的 VIEW 语句提供了便捷和简单的方法来创建虚拟表,这些虚拟表可以用于多种场合,如数据报表、数据查询、数据权限管理等。试图不包含实际的数据,它们只是基于 SQL select 语句查询结果集的快捷方式。这样的好处是,在处理大量的数据或处理大量的复杂查询时,试图所表现出来的优良性能会非常有用。