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存儲過程