Субд лекции

Темы:

Создание представлений (VIEW)

Оператор CREATE VIEW

Оператор для создания представления выглядит следующим образом (синтаксис SQL-92)[§]:

CREATE VIEW <имя представления> [(<список столбцов выборки>)]

AS< SELECT оператор>

[WITH [CASCADED |LOCAL] CHECK OPTION]);

Данный оператор создает виртуальную таблицу, состав которой определяется оператором SELECT.

Список имен столбцов должен быть обязательно определен лишь в следующих случаях:

·       если хотя бы один из столбцов подзапроса не имеет имени (создается с помощью выражения, SQL-функции или константы);

·       если два (или более) столбца подзапроса имеют одно и то же имя.

Если список отсутствует, то представление наследует имена столбцов из подзапроса.

Представления не хранятся в памяти в виде физических таблиц. Когда используется оператор CREATE VIEW, подзапрос, следующий за AS, не исполняется. Просто в каталоге сохраняется соответствующее описание.

Пользователь может работать в дальнейшем с представлениями как с обычными таблицами (он может даже не знать, что работает с представлением). При обращении к представлению с запросом последний преобразуется системой с учетом описания представления, и такой объединенный запрос исполняется.

Следует иметь в виду, что запрос к виртуальной таблице может оказаться невыполнимым, поскольку при его преобразовании получается некорректный оператор. Является ли заданная операция выполнимой - зависит от того, как реализован алгоритм преобразования запросов в конкретной системе.

Как видно из описания формата оператора CREATE VIEW, столбцы виртуальной таблицы могут быть заданы явно, а могут быть и опущены. В последнем случае представление будет содержать те столбцы, которые определены в подзапросе. В явном виде необходимо задавать имена столбцов в случае, если какой-нибудь столбец представления получен путем вычисления арифметического выражения либо является результатом стандартной функции или константой, т.е. в том случае, когда столбец не имеет имени и не может его наследовать. В явном виде следует задавать имена столбцов также в том случае, если без этого два (или более) столбца имели бы одинаковое имя.

предыдущаяследующая