Представления можно использовать для ограничения доступа пользователей к определенным столбцам или строкам таблиц, в зависимости от условий, задаваемых выражением ключевого слова WHERE в определении представления.
Представления являются очень удобным средством для создания итоговых отчетов на основе данных таблиц, которые обновляются очень часто.
Предположим, у вас есть таблица с информацией о городе проживания, поле, оплате труда и возрасте сотрудников фирмы. Тогда вы имеете возможность создать на основе таблицы представление, предлагающее сведения о сотрудниках по каждому городу, включающее средний возраст, среднюю зарплату, общее число сотрудников и общее число сотрудниц. После создания такого представления, его можно будет использовать для извлечения подобной информации из таблицы вместо того, чтобы каждый раз создавать соответствующий оператор SELECT, который в подобном случае может быть довольно сложным.
Единственной особенностью синтаксиса оператора, с помощью которого создается представление с итоговыми данными, по сравнению с обычным представлением является наличие в операторе итоговых функций. По поводу использования итоговых функций обратитесь снова к тексту урока 9, "Подведение итогов по данным запроса".
Представление существует только в оперативной памяти. Представление не требует дискового пространства, как другие объекты базы данных, кроме пространства, занимаемого определением самого представления. Владельцем представления является создатель представления или владелец схемы. Владелец схемы автоматически получает все соответствующие привилегии доступа к представлению и право предоставлять привилегии доступа к нему другим пользователям точно так же, как и в отношении обычных таблиц. С представлениями команда GRANT и ее опция GRANT OPTION работают точно так же, как и с таблицами. За подробностями обратитесь к тексту урока 19, "Обеспечение сохранности данных".
Представления создаются с помощью команды CREATE VIEW. Представление можно создать на базе данных одной или нескольких таблиц, а также других представлений. Чтобы создать представление, пользователь должен иметь соответствующие привилегии доступа к системе, зависящие от реализации языка.
Базовый синтаксис оператора CREATE VIEW следующий.
CREATE [ RECURSIVE ] VIEW ИМЯ_ПРЕДСТАВЛЕНИЯ
[ИМЯ_СТОЛБЦА [, ИМЯ_СТОЛБЦА]]
[OF ИМЯ_иОТ [UNDER ИМЯ_ТАБЛИЦЫ]
[REF IS ИМЯ_СТОЛБЦА SYSTEM GENERATED | USER GENERATED | DERIVED]
[ИМЯ_СТОЛБЦА WITH OPTIONS SCOPE ИМЯ_ТАБЛИЦЫ] ]
AS
{ОПЕРАТОР SELECT}
WITH [CASCADED | LOCAL] CHECK OPTION]
Примеры различных способов создания представлений с помощью оператора CREATE VIEW обсуждаются в следующих разделах.
В ANSI SQL никакого стандарта для оператора ALTER VIEW не предусматривается.
Представление может быть создано на основе данных одной таблицы. Синтаксис соответствующего оператора следующий (указанная здесь опция WITH CHECK OPTION будет обсуждаться чуть позже).
CREATE VIEW ИМЯ_ПРЕДСТАВЛЕНИЯ AS
SELECT * | СТОЛБЕЦ1 [ , СТОЛБЕЦ2 ]
FROM ИМЯ_ТАБЛИЦЫ
[ WHERE ВЫРАЖЕНИЕ1 [, ВЫРАЖЕНИЕ2 ]]
[ WITH CHECK OPTION ]
[ GROUP BY ]
В своем самом простом виде представление строится на основе всех данных таблицы, как в следующем примере.
CREATE VIEW CUSTOMERS AS
SELECT *
FROM CUSTOMER_TBL;
Представление создано.
В следующем примере создаваемое представление должно содержать только указанные столбцы таблицы.
CREATE VIEW EMP_VIEW AS
SELECT LAST_NAME, FIRST_NAME, MIDDLE_NAME
FROM EMPLOYEE_TBL;
Представление создано.
Из следующего примера видно, каким образом в представлении можно преобразовать данные столбцов таблицы. В этом представлении для столбца вывода в операторе SELECT назначается псевдоним NAME.
CREATE VIEW NAMES AS
SELECT LAST_NAME || ', ' || FIRST_HAME || ' ' || MIDDLE_NAME
NAME
FROM EMPLOYEE_TBL;
Представление создано.
Теперь выберем все данные только что созданного представления с именем NAMES.
SELECT *
FROM NAMES;
NAME
--------------
STEPHENS, TINA D
PLEW, LINDA С
GLASS, BRANDON S
GLASS, JACOB
WALLACE, MARIAH
SPURGEON, TIFFANY
6 строк выбраны.
Из следующего примера видно, как создаются представления на основе одной или нескольких таблиц с подведением итогов.
CREATE VIEW CITY_PAY AS
SELECT E.CITY, AVG(P.PAY_RATE) AVG_PAY
FROM EMPLOYEEJTBL E
EMPLOYEE_PAY_TBL P
WHERE E.EMP_ID = P.EMP_ID
GROUP BY E.CITY;
Представление создано.
Теперь выберем данные только что созданного представления.
SELECT *
FROM CITYJPAY;
CITY AVG_PAY
--------------------------
GREENWOOD
INDIANAPOLIS 13.33333
WHITELAND
3 строки выбраны.
После создания представления его использование в операторах SELECT позволяет их значительно упростить.
Представление можно создать на базе данных нескольких таблиц, используя связи в операторе SELECT. Опция WITH CHECK OPTION будет обсуждаться немного позже. Синтаксис оператора следующий.
CREATE VIEW ИМЯ_ПРЕДСТАВЛЕНИЯ AS
SELECT * | СТОЛБЕЦ1 [ , СТОЛБЕЦ2 ]
FROM ИМЯ_ТАБЛИЦЫ1, ИМЯ_ТАБЛИЦЫ2 [ , ИМЯ_ТАБЛИЦЫЗ ]
WHERE ИМЯ_ТАБЛИЦЫ1 = ИМЯ_ТАБЛИЦЫ2
[ AND ИМЯ_ТАБЛИЦЫ1 = ИМЯ_ТАБЛИЦЫЗ ]
[ ВЫРАЖЕНИЕ1 ][, ВЫРАЖЕНИЕ2 ]
WITH CHECK OPTION ]
[ GROUP BY ]
Вот пример создания представления на основе данных нескольких таблиц.
CREATE VIEW EMPLOYEE_SUMMARY AS
SELECT E.EMP_ID, E.LAST_NAME, P.POSITION, P.DATE_HIRE,
P. PAY_RATE
FROM EMPLOYEEJTBL E
EMPLOYEE_PAY_TBL P
WHERE E.EMP_ID = P.EMP_ID;
Представление создано.
He забывайте о том, что при выборе данных из нескольких таблиц, таблицы должны быть связанными по общему ключу в выражении ключевого слова WHERE. Представление - это ни что иное, как оператор SELECT, и поэтому таблицы в нем связываются точно так же, как и в обычном операторе SELECT. He забывайте также о пользе псевдонимов, позволяющих упростить вид запроса с множеством таблиц.
Представление можно создать на основе другого представления с помощью оператора следующего вида.