在本教學中,將學習如何使用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存儲過程