В этом руководстве вы узнаете, как использовать оператор 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 — это имя схемы, к которой принадлежит представление.
- Во-вторых, укажите оператор SELECT(select_statement), который определяет представление после ключевого слова AS. Оператор SELECT может ссылаться на одну или несколько таблиц.
Если вы явно не укажете список столбцов для представления, SQL Server будет использовать список столбцов, полученный из оператора SELECT.
Если вы хотите переопределить представление, например, добавить в него больше столбцов или удалить из него некоторые столбцы, вы можете использовать ключевые слова OR ALTER после ключевых слов CREATE VIEW.
Примеры SQL Server CREATE VIEW
Для демонстрации мы будем использовать таблицы orders, order_items и products из образца базы данных.

Создание простого примера представления
Следующий оператор создает представление с именем daily_sales на основе таблиц orders, order_items и products:
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;
Ниже показан результат:

Переопределение примера представления
Чтобы добавить столбец с именем клиента в представление sales.daily_sales, используйте CREATE VIEW OR ALTER следующим образом:
CREATE OR ALTER 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
y,
m,
d,
customer_name;
Вот что получилось:

Пример создания представления с использованием агрегатных функций
Следующий оператор создает представление с именем staff_sales, которое суммирует продажи по персоналу и годам с помощью агрегатной функции 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 CREATE VIEW.




