Представления
Представление - это виртуальная (реально не существующая) таблица, которая в базе данных не хранится. В БД храниться лишь описание этой виртуальной таблицы.
Основой представления является оператор SELECT произвольной сложности, который
задает выборку данных из одной или более таблиц, других представлений, а
также селективных хранимых процедур. В базе данных хранится оператор
SELECT, но не результаты его выполнения. Результат в виде набора
данных создается при обращении к представлению. К представлениям можно
обращаться в операторах SELECT, представления могут принимать участие
в операциях объединения (UNION) и соединения (JOIN), заданных в
операторе выборки данных. Другими словами, представление можно использовать практически также, как и реальную таблицу.
Представления, задавая выборку не всех, а только отдельных столбцов и строк исходных таблиц, дают возможность скрыть от рядового пользователя системы некоторые данные, не предназначенные для широкого просмотра. Например, это могут быть оклады сотрудников, пароли, некоторые количественные характеристики деятельности организации и др. В этом отношении представления являются хорошим средством повышения безопасности данных.
Для создания представления используется оператор CREATE VIEW.
CREATE VIEW <имя представления> [(<список столбцов>)]
AS <оператор SELECT>
После имени создаваемого представления может идти список имен полей
представления, заключенный в скобки. Если в представлении присутствуют
элементы, значения которых получаются из выражений, то такой список
столбцов является обязательным. В остальных случаях список можно не
указывать. Обращение к столбцам можно осуществлять по именам столбцов,
которые указаны в списке выбора главного оператора SELECT в
представлении. Однако хорошей практикой является явное задание списка
столбцов в самом представлении. Имена в списке могут быть никак не
связаны с именами столбцов базовых таблиц. При этом их количество должно
точно соответствовать количеству столбцов в списке выбора главного
оператора SELECT представления. По этим именам в списке к столбцам
полученного набора данных можно обращаться в операторе SELECT,
вызывающем данное представление.
После ключевого слова AS следует оператор SELECT. Здесь можно
выполнять объединение (UNION) и соединение (JOIN) различных таблиц,
использовать предложение WHERE для задания условий выбора строк.
Для изменения существующего представления используется оператор
ALTER VIEW <имя представления> [(<список столбцов>)]
AS <оператор SELECT>
Синтаксис оператора ALTER VIEW полностью аналогичен синтаксису
оператора CREATE VIEW.
Для создание нового или изменение существующего представления
используется оператор CREATE OR ALTER VIEW.
CREATE OR ALTER VIEW <имя представления> [<список столбцов>]
AS <оператор SELECT>
Оператор CREATE OR ALTER VIEW создаёт представление, если оно не
существует. В противном случае он изменит представление с сохранением
существующих зависимостей.
Для удаления существующего в базе данных представления используется
оператор DROP VIEW.
DROP VIEW <имя представления>;
Представление нельзя удалить, если на него есть ссылки в другом
представлении, в хранимой процедуре или в ограничении CHECK столбца
таблицы или соответствующего ограничения на уровне таблицы.
В качестве примера рассмотрим следующее представление.
CREATE VIEW SELECT_PEOPLE (C1, C2, C3)
AS
SELECT
P.FULLNAME AS FULLNAME,
PM.FULLNAME AS MOTHER,
PF.FULLNAME AS FATHER
FROM PEOPLE P
LEFT OUTER JOIN PEOPLE PM
ON P.CODMOTHER = PM.COD
LEFT OUTER JOIN PEOPLE PF
ON P.CODFATHER = PF.COD;
В данном случае представление основано на запросе, в котором таблицы PEOPLE соединяется дважды сама с собой. Каждое соединение добавляет к столбцам записи, столбцы из строки с информацией о матери и об отце. В результате, такое представление позволяет делать более простые и понятные выборки из БД. Например,
SELECT * FROM SELECT_PEOPLE;
Контрольные вопросы
- Что такое “представление”?
- Приведите пример полезного применения представления?
- Где происходит обращение к представлению?
- Где хранятся данные, которые выбираются из представления?