SQL Server创建视图

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示例下面将使用示例数据库中的以下几个表: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;

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

上一篇:

SQL Server视图

下一篇:

SQL Server存储过程

相关数据

beat365在线体育正规吗 如何用Linux删除IP地址? (linux下删除ip的命令)
0365cc彩票APP官方版下载 电脑开机之后,鼠标可以移动,但是点任何东西都没有反应,左键右键都不行,求各位大神解答一下?
0365cc彩票APP官方版下载 灌篮高手安西对三井为何没有谷泽事件的态度?不是因他未高看三井