在本教程中,将学习如何使用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示例
下面将使用示例数据库中的以下几个表:orders
,order_items
和products
进行演示。
1. 创建一个简单的视图示例
以下语句根据orders
,order_items
和products
表创建名为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 VIEW
或ALTER
语句,如下所示:
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;
执行上面查询,得到以下结果: