SQL Server创建视图

在本教程中,将学习如何使用SQL Server CREATE VIEW语句创建新视图。

要在SQL Server中创建新视图,请使用CREATE VIEW语句,如下所示:

CREATE VIEW [OR ALTER] schema_name.view_name [(column_list)]
AS
    select_statement;

在上面语法中 -

  • CREATE VIEW关键字后指定视图的名称。schema_name是视图所属的架构的名称。
  • 指定定义AS关键字后面的视图的SELECT语句(select_statement)。 SELECT语句可以引用一个或多个表。

如果未明确指定视图的列列表,SQL Server将使用从SELECT语句派生的列列表。

如果想重新定义视图,例如,向其添加更多列或从中删除一些列,可以在CREATE VIEW关键字后使用OR ALTER关键字。

SQL Server CREATE VIEW示例

下面将使用示例数据库中的以下几个表:ordersorder_itemsproducts进行演示。

创建视图

1. 创建一个简单的视图示例

以下语句根据ordersorder_itemsproducts表创建名为daily_sales的视图:

CREATE VIEW sales.daily_sales
AS
SELECT
    year(order_date) AS y,
    month(order_date) AS m,
    day(order_date) AS d,
    p.product_id,
    product_name,
    quantity * i.list_price AS sales
FROM
    sales.orders AS o
INNER JOIN sales.order_items AS i
    ON o.order_id = i.order_id
INNER JOIN production.products AS p
    ON p.product_id = i.product_id;

创建daily_sales视图后,可以使用简单的SELECT语句在视图上针对基础表查询数据:

SELECT 
    * 
FROM 
    sales.daily_sales
ORDER BY
    y, m, d, product_name;

执行上面查询,得到以下结果:
查询视图

2. 重新定义视图示例

要将客户名称列添加到sales.daily_sales视图,请使用CREATE VIEWALTER语句,如下所示:

CREATE OR ALTER VIEW sales.daily_sales (
    year,
    month,
    day,
    customer_name,
    product_id,
    product_name,
    sales
)
AS
SELECT
    year(order_date),
    month(order_date),
    day(order_date),
    concat(
        first_name,
        ' ',
        last_name
    ),
    p.product_id,
    product_name,
    quantity * i.list_price
FROM
    sales.orders AS o
    INNER JOIN
        sales.order_items AS i
    ON o.order_id = i.order_id
    INNER JOIN
        production.products AS p
    ON p.product_id = i.product_id
    INNER JOIN sales.customers AS c
    ON c.customer_id = o.customer_id;

在此示例中,明确指定了视图的列列表。

以下语句从sales.daily_sales视图查询数据:

SELECT 
    * 
FROM 
    sales.daily_sales
ORDER BY 
    year, 
    month, 
    day, 
    customer_name;

执行上面查询,得到以下结果:

从视图查询数据

3. 使用聚合函数创建视图示例

以下语句创建名为staff_salesthose的视图,使用SUM()聚合函数按人员和年份汇总销售额:

CREATE VIEW sales.staff_sales (
        first_name, 
        last_name,
        year, 
        amount
)
AS 
    SELECT 
        first_name,
        last_name,
        YEAR(order_date),
        SUM(list_price * quantity) amount
    FROM
        sales.order_items i
    INNER JOIN sales.orders o
        ON i.order_id = o.order_id
    INNER JOIN sales.staffs s
        ON s.staff_id = o.staff_id
    GROUP BY 
        first_name, 
        last_name, 
        YEAR(order_date);

以下语句从视图中查询数据:

SELECT  
    * 
FROM 
    sales.staff_sales
ORDER BY 
 first_name,
 last_name,
 year;

执行上面查询,得到以下结果:


上一篇: SQL Server视图 下一篇: SQL Server存储过程