Таблицы определяют структуру базы данных и организацию информации в ней.
Представлением называется запрос на выборку, которому присвоили имя, а затем сохранили в базе данных. Представление позволяет пользователю увидеть результаты сохраненного запроса, a СУБД обеспечивает доступ к этим результатам, таким образом, как если бы они были простой таблицей.
Представления используются по нескольким причинам:
• они позволяют сделать так, что разные пользователи базы данных будут видеть ее по-разному;
• с их помощью можно ограничить доступ к данным, разрешая пользователям видеть только некоторые из строк и столбцов таблицы;
• они упрощают доступ к базе данных, показывая каждому пользователю структуру хранимых данных в наиболее подходящем для него виде.
Иногда представления называют “виртуальными таблицами”, содержимое которых определяется запросом. Для пользователя базы данных представление выглядит подобно обычной таблице, состоящей из строк и столбцов. Однако, в отличие от таблицы, представление как совокупность значений в базе данных реально не существует. Строки и столбцы данных, которые пользователь видит с помощью представления, являются результатами запроса, лежащего в его основе. При создании представление получает имя, и его определение сохраняется в базе данных.
Инструкция 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 как к обычной таблице: