Оператор CREATE VIEW
Оператор для создания представления выглядит следующим образом (синтаксис SQL-92)[§]:
CREATE VIEW <имя представления> [(<список столбцов выборки>)]
AS< SELECT оператор>
[WITH [CASCADED |LOCAL] CHECK OPTION]);
Данный оператор создает виртуальную таблицу, состав которой определяется оператором SELECT.
Список имен столбцов должен быть обязательно определен лишь в следующих случаях:
· если хотя бы один из столбцов подзапроса не имеет имени (создается с помощью выражения, SQL-функции или константы);
· если два (или более) столбца подзапроса имеют одно и то же имя.
Если список отсутствует, то представление наследует имена столбцов из подзапроса.
Представления не хранятся в памяти в виде физических таблиц. Когда используется оператор CREATE VIEW, подзапрос, следующий за AS, не исполняется. Просто в каталоге сохраняется соответствующее описание.
Пользователь может работать в дальнейшем с представлениями как с обычными таблицами (он может даже не знать, что работает с представлением). При обращении к представлению с запросом последний преобразуется системой с учетом описания представления, и такой объединенный запрос исполняется.
Следует иметь в виду, что запрос к виртуальной таблице может оказаться невыполнимым, поскольку при его преобразовании получается некорректный оператор. Является ли заданная операция выполнимой - зависит от того, как реализован алгоритм преобразования запросов в конкретной системе.
Как видно из описания формата оператора CREATE VIEW, столбцы виртуальной таблицы могут быть заданы явно, а могут быть и опущены. В последнем случае представление будет содержать те столбцы, которые определены в подзапросе. В явном виде необходимо задавать имена столбцов в случае, если какой-нибудь столбец представления получен путем вычисления арифметического выражения либо является результатом стандартной функции или константой, т.е. в том случае, когда столбец не имеет имени и не может его наследовать. В явном виде следует задавать имена столбцов также в том случае, если без этого два (или более) столбца имели бы одинаковое имя.
предыдущаяследующая