В этом руководстве вы узнаете, как использовать оператор 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.