在本教程中,将学习如何使用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;
执行上面查询,得到以下结果:
¥ 我要打赏
纠错/补充
收藏
加QQ群啦,易百教程官方技术学习群
注意:建议每个人选自己的技术方向加群,同一个QQ最多限加 3 个群。