Представления

Представление - это виртуальная (реально не существующая) таблица, которая в базе данных не хранится. В БД храниться лишь описание этой виртуальной таблицы. Основой представления является оператор 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;

Контрольные вопросы

  1. Что такое “представление”?
  2. Приведите пример полезного применения представления?
  3. Где происходит обращение к представлению?
  4. Где хранятся данные, которые выбираются из представления?