Виртуальные таблицы используются для создания постоянно хранящихся сложных запросов. К виртуальной таблице можно обращаться как к обычной таблице. Она может использоваться в качестве таблицы в предложениях SELECT, INSERT, INPUT, UPDATE, DELETE. Виртуальная таблица не занимает места в базе данных как обычная таблица. Синтаксис следующий:
CREATE VIEW <view_name> [(column1, column2...)] AS
SELECT <column_names>
FROM <table_names>
[WHERE …]
[WITH CHECK OPTION]
Необязательная фраза WITH CHECK OPTION (с проверкой) указывает, что для операций INSERT и UPDATE над этой таблицей должна осуществляться проверка, обеспечивающая удовлетворение WHERE фразы подзапроса.
Таким образом, виртуальная таблица – это поименованная таблица, получаемая в результате выполнения SELECT предложения с возможным изменением имен столбцов.
Простая виртуальная таблица. Это виртуальная таблица, являющаяся копией исходной, но под другим именем.
CREATE VIEW FACULTYCOPY AS
SELECT * FROM FACULTY
Здесь создается виртуальная таблица FACULTYCOPY, являющаяся точной копией FACULTY.
Можно также создавать виртуальные таблицы на основе других виртуальных таблиц.
Выбор колонок. Можно указать на использование в виртуальной таблице отдельных колонок исходной таблицы.
CREATE VIEW DEP_HEAD_NAMES (Name, Head) AS
SELECT * FROM FACULTY
Переименование колонок. Синтаксис создания виртуальных таблиц позволяет переименовывать колонки исходной таблицы. Для этого необходимо явно указать колонки во фразе SELECT и указать необходимые имена колонок во фразе CREATE VIEW.
CREATE VIEW TEACHER_NAME_POST (First_Name, Position) AS
SELECT Name, Post FROM TEACHER
Сложные конструкции. Предложение SELECT в виртуальной таблице может обладать произвольной сложностью. Например, для получения виртуальной таблицы со списком преподавателей факультета информатики, работающих также на других факультетах, следует написать.
CREATE VIEW TEACHER_2 (First_Name, Position) AS
SELECT TEACHER.Name, Post
FROM FACULTY, DEPARTMENT, TEACHER
WHERE FACULTY.#F = DEPARTMENT.#F AND
DEPARTMENT.#D = TEACHER.#D AND
FACULTY.Name = 'IT' AND
TEACHER.Name IN
SELECT TEACHER.Name
FROM FACULTY, DEPARTMENT, TEACHER
WHERE FACULTY.#F = DEPARTMENT.#F AND
DEPARTMENT.#D = TEACHER.#D
FACULTY.Name != 'IT'
Ограничения на использования предложения SELECT. SQL накладывает следующие ограничения на использование предложения SELECT при определении виртуальной таблицы:
· нельзя использовать оператор UNION,
· нельзя использовать фразу ORDER BY.
Изменение данных через виртуальные таблицы. Виртуальные таблицы можно использовать в предложениях UPDATE, INSERT, DELETE для изменения данных в базе данных, но при этом должны выполняться следующие условия:
· нельзя использовать предложение DELETE к виртуальным таблицам, определенным на многих базовых таблицах
· предложение INSERT можно использовать только в том случае, если виртуальная таблица содержит все NOT NULL колонки базовой таблицы.
· если происходит вставка или обновление через соединенную виртуальную таблицу, то все обновляемые записи должны принадлежать одной и той же физической таблице.
· нельзя вставлять или обновлять записи через виртуальную таблицу, определенную с фразой DISTINCT.
· нельзя обновлять виртуальные колонки (то есть колонки, являющиеся вычислением выражения или выполнения функции)
Возможные применения виртуальных таблиц. Виртуальная таблица может использоваться для:
· обеспечение логической независимости,
· обеспечения защиты данных,
· осуществления конвертирования данных,
· упрощения конструкций сложных запросов.
Обеспечение логической независимости. Одна из основных задач, которую позволяют решать виртуальные таблицы, - обеспечение независимости пользовательских программ от изменения логической структуры базы данных при ее расширении и (или) изменении размещения столбцов, возникающего, например, при расщеплении таблиц.
Виртуальные таблицы и защита данных. Виртуальные таблицы могут использоваться для указания той информации, которая является доступной тому или иному пользователю. Ограничивая доступ пользователей только через виртуальные таблицы, можно решать проблему защиты данных.
Конвертирование данных. Виртуальные таблицы могут оказаться полезными, когда необходимо представить пользователю данные в формате, отличающимся от используемого при хранении данных в базе данных. Например, довольно легко можно решить проблему преобразования данных о зарплате, хранимой в базе данных в одной денежной единице, в другую денежную единицу в той или иной виртуальной таблице.
Упрощение конструкций сложных запросов. Виртуальными таблицами также можно воспользоваться в том случае, когда необходимо формулировать множество сложных запросов, имеющих иерархическую структуру. В этом случае создается иерархическая структура виртуальных таблиц.
Удаление виртуальной таблицы. Есть команда для удаления виртуальной таблицы. Ее синтаксис следующий:
DROP VIEW view_name
При удалении виртуальной таблицы следует помнить, что все другие виртуальные таблицы, которые определялись на ее основе, становятся недействительными.