Представления – это объекты базы данных, которые можно рассматривать как виртуальные таблицы. На самом деле хранится только формулировка команды SELECT, с помощью которой производится выборка данных из реальных таблиц.
Необходимость в использовании представлений возникает, например, в том случае, когда нужно запретить доступ пользователя к отдельным столбцам или строкам таблицы – тогда можно просто написать представление, в котором эти столбцы или строки не будут присутствовать, и предоставить доступ пользователю именно к этому представлению, а не к реальной таблице.
Другой полезной возможностью является вычисление значений, которые не хранятся непосредственно в таблице, но всегда могут быть рассчитаны.
Представление, как и запрос, может содержать информацию из разных таблиц.
Представления могут быть обновляемыми (т.е., предоставлять возможность не только чтения, но и изменения данных в исходных таблицах) и необновляемыми. Представление будет обновляемым только в том случае, если его структура такова, что SQL server может точно определить, в какие строки каких таблиц нужно поместить измененные данные. Необновляемыми будут, например, представления, содержащие итоговые данные и группировки.
Для создания представлений используется команда CREATE VIEW.
Краткий формат этой команды:
CREATE VIEW имя_представления AS
Команда_SELECT
Команду создания представления нужно либо выполнять отдельно от других команд, либо сразу после нее поставить команду GO, как в следующем примере.
Например, создадим представление, содержащее список договоров и их кураторов для отдела с номером 1. Будет ли это представление обновляемым?
Создадим вспомогательное представление для запросов о полностью оплаченных и частично оплаченных счетах (см. предыдущее занятие). Это представление для каждого счета содержит его номер и сумму оплаты.
CREATE VIEW k_pay_sum
AS
SELECT bill_num, SUM(payment_sum) AS pay_sum
FROM k_payment
GROUP BY bill_num
GO
Для просмотра представления следует выполнить команду
SELECT * FROM k_pay_sum.
Это представление не будет обновляемым.
Результат выполнения команды:
bill_num pay_sum
----------------------
1 1000.00
2 1000.00
3 2000.00
4 1000.00
7 1000.00
8 1000.00
Теперь с помощью данного представления можно переформулировать сам запрос, он станет проще: