Инструкция CREATE VIEW, синтаксическая диаграмма которой изображена на рисунке 8, используется для создания представлений. В ней указываются имя представления и запрос, лежащий в его основе. Для успешного создания представления необходимо иметь разрешение на доступ ко всем таблицам, входящим в запрос.
При необходимости в инструкции CREATE VIEW можно задать имя для каждого столбца создаваемого представления. Если указывается список имен столбцов, то он должен содержать столько элементов, сколько столбцов содержится в запросе, причем в списке задаются только имена столбцов; тип данных, длина и другие характеристики берутся из определения столбца в исходной таблице. Если список имен столбцов в инструкции CREATE VIEW отсутствует, каждый столбец представления получает имя соответствующего столбца запроса. Если в запрос входят вычисляемые столбцы или два столбца с одинаковыми именами, то без такого списка обойтись невозможно.
Приведем примеры инструкций, создающих различные представления:
Пример 1
Создать представление, показывающее информацию о служащих, работающих в отделении компании города Минска.
create view Minsk as
select * from staff
where bno in (select bno
from branch
where city = ‘Минск’);
Представленный пример – это пример создания простого горизонтального представления, т.е. представления которое позволяет видеть в исходной таблице STAFF не все строки, а только те, которые удовлетворяют условию отбора запроса, лежащего в его основе.
Пример 2
Создать представление, показывающее избранную информацию о служащих.
create view info as
select fname, lname, position
from staff;
Данный пример – это пример создания простого вертикального представления, т.е. представления, ограничивающее доступ к столбцам исходной таблицы.
Пример 3
При создании представлений обычно требуется разделять таблицу и по вертикали, и по горизонтали:
Создать представление, включающее избранную информацию обо всех квартирах сотрудника …
create view property as
select street, area, type, rent
from property_for_rent
where sno = (select sno from staff
where fname=’…’ and lname=’…’);
Пример 4
Создать представление с информацией о средней заработной плате сотрудников по каждому отделению.
create view average_salary as
select bno, avg(salary)
from staff
group by bno;
Приведенный пример – это пример создания сгруппированного представления. В отличие от горизонтальных и вертикальных представлений, каждой строке сгруппированного представления не соответствует какая-то одна строка исходной таблицы. Сгруппированное представление не является просто фильтром исходной таблицы, скрывающим некоторые строки и столбцы. Оно отображает исходную таблицу в виде резюме, поэтому поддержка такой виртуальной таблицы требует от СУБД значительного объема вычислений.
После определения представления к нему можно обращаться с помощью инструкции SELECT как к обычной таблице: