В ходе этого урока мы с вами поговорим о производительности, о создании и удалении представлений, о роли представлений в обеспечении защиты данных и о том, как обеспечить конечному производителю простоту доступа к данным и составления отчетов. Кроме того, мы поговорим о синонимах.
Основными на этом уроке будут следующие темы.
• Что такое представление?
• Использование представлений
• Представления и безопасность
• Хранение представлений
• Создание представлений
• Связанные представления
• Манипуляция данными в представлениях
• Что такое синоним?
• Управление синонимами
• Создание синонимов
• Удаление синонимов
Представление — это виртуальная таблица, т. е. представление выглядит как таблица и ведет себя при обращении с ним пользователя подобно таблице. Представление на самом деле является комбинацией таблиц в форме заранее определенного запроса. Например, на основе таблицы EMPLOYEE_TBL можно создать представление, содержащее только имена и адреса сотрудников, а не все столбцы таблицы. Представление может содержать также не все, а только некоторые столбцы таблицы. Представление может основываться на данных как одной, так и нескольких таблиц.
Представление — это заранее определенный запрос, сохраненный в базе данных, имеющий вид обычной таблицы и проявляющий себя подобно таблице, но не требующий дополнительного места для хранения.
Созданное представление фактически означает выполнение в отношении базы данных того оператора SELECT, который составляет суть представления. Такой оператор SELECT может либо просто содержать список столбцов таблицы, из которой из-ачекаются данные, либо может быть более сложным и включать обработку извлекаемых данных с помощью различных функций для представления этих данных в том виде, в котором их удобно видеть пользователю. Взгляните на рис. 20.1.
Представление рассматривается как объект базы данных, хотя оно и не требует реального места для своего хранения. Главное различие между представлением и таблицей состоит в том, что данные таблицы требуют физической памяти для своего хранения, а представление просто ссылается на данные реальных таблиц и поэтому места для своих данных не требует.
Представление используется точно так же, как и обычная таблица. Данными представления тоже можно манипулировать, хотя и с некоторыми ограничениями. В следующих разделах обсуждаются некоторые общие способы использования представлений, а также то, как представления хранятся в базе данных.
Рис. 20.1, Представление
Если используемая в представлении таблица удаляется, представление становится недоступным, и тогда при попытке выполнения запроса в отношении данного представления будет получено сообщение об ошибке
Использование представлений для защиты данных
Представления можно использовать для защиты данных. Предположим, что у вас имеется таблица EMPLOYEE_TBL, содержащая имена, адреса, телефоны сотрудников, данные для срочной связи с ними, названия их отделов, должности и сведения об оплате их труда. Вам дали несколько сотрудников в помощь для составления ряда отчетов и для этого им понадобятся сведения об именах, адресах и телефонах. Если предоставить помощникам полный доступ к таблице EMPLOYEE_TBL, они смогут увидеть информацию об оплате других сотрудников, а вам бы этого не хотелось. Чтобы этого не допустить, вы можете создать представление, содержащее только требуемую информацию, а именно, только имена, адреса и телефоны сотрудников. В этом случае временные помощники получат доступ только к требуемой для отчета информации и не смогут получить из таблицы информацию об оплате труда.
Представления можно использовать для ограничения доступа пользователей к определенным столбцам или строкам таблиц, в зависимости от условий, задаваемых выражением ключевого слова 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 забывайте также о пользе псевдонимов, позволяющих упростить вид запроса с множеством таблиц.
Создание представления на основе другого представления
Представление можно создать на основе другого представления с помощью оператора следующего вида.
CREATE VIEW ПРЕДСТАВЛЕНИЕ2 AS
SELECT * FROM ПРЕДСТАВЛЕНИЕ1
Уровни зависимости представлений
Новые представления на основе уже созданных можно создавать с достаточной глубиной зависимости (представление на основе представления на основе представления...), определяемой ограничениями конкретной реализации языка. Единственной проблемой при создании новых представлений на основе уже имеющихся является их управляемость. Например, если вы сначала создадите представление VIEW2 на основе представления VIEWI, представление VIEWS на основе представления VIEW2, а затем удалите представление VIEWI, то с представлениями VIEW2 и VIEWS возникнут проблемы, поскольку информация, на которые ссылаются эти представления, будет недоступна. Поэтому необходимо хорошо представлять себе место представлений в базе данных и то, на основе каких объектов эти представления созданы. Зависимость представлений схематически показана на рис. 20.2.
Если представление нужного вида на основе реальной таблицы создать так же легко, как и на основе другого представления, предпочтение следует отдать представлению на основе таблицы.
Рис. 20.2. Схема зависимости представлений
На рис. 20.2 показана схема зависимости представлений, основывающихся не только на таблицах, но и на других представлениях. ПРЕДСТАВЛЕНИЕ1 и ПРЕДСТАВЛЕНИЕ2 зависят от таблицы ТАБЛИЦА. ПРЕДСТАВЛЕНИЕЗ зависит от представления ПРЕДСТАВЛЕНИЕ1. ПРЕДСТАВЛЕНИЕ4 зависит от представлений ПРЕДСТАВЛЕНИЕ1 и ПРЕДСТАВЛЕНИЕ2. ПРЕДСТАВЛЕНИЕ5 зависит от представления ПРЕДСТАВЛЕНИЕ2. На основе анализа зависимостей можно заключить следующее.
• Если удалить ПРЕДСТАВЛЕНИЕ 1, несостоятельными станут ПРЕДСТАВЛЕНИЕЗ
и ПРЕДСТАВЛЕНИЕ4.
• Если удалить ПРЕДСТАВЛЕНИЕ2, несостоятельными станут ПРЕДСТАВЛЕНИЕ4
и ПРЕДСТАВЛЕНИЕЗ.
• Если будет удалена ТАБЛИЦА, несостоятельными станут все представления.
Опция WITH CHECK OPTION является опцией оператора CREATE VIEW. Эта опция применяется тогда, когда необходимо гарантировать, что все применяемые операторы UPDATE и INSERT удовлетворяют указанным в определении представления условиям. Если при этом указанные условия будут не удовлетворены, оператор UPDATE или INSERT возвратит ошибку. Опция WITH CHECK OPTION имеет свои собственные опции CASCADED и LOCAL. Опция WITH CHECK OPTION фактически гарантирует ссылочную целостность данных путем проверки отсутствия нарушений определения представления при обновлении данных.
Вот пример создания представления с использованием опции WITH CHECK OPTION.
CREATE VIEW EMPLOYEE_PAGERS AS
SELECT LAST_NAME, FIRST_NAME, PAGER
FROM EMPLOYEE_TBL
WHERE PAGER IS NOT NULL
WITH CHECK OPTION;
Представление создано.
Здесь опция WITH CHECK OPTION запрещает ввод значений NULL в столбец PAGER представления, поскольку представление определяется данными, не содержащими значения NULL в столбце PAGER.
Теперь попробуем ввести значение NULL в столбец PAGER.
INSERT INTO EMPLOYE_PAGERS
VALUES ('SMITH','JOHN',NULL);
INSERT INTO EMPLOYEE_PAGERS
*
ERROR at line 1:
ORA-01400: mandatory (NOT NULL) column is missing or NULL
during insert
Опция WITH CHECK OPTION работает.
При использовании опции WITH CHECK OPTION в операторе создания представления из другого представления предлагается также использовать CASCADED или LOCAL.
По умолчанию, т. е. когда ничего не указано, используется CASCADED. В этом случае проверяются все представления, от которых зависит данное, все условия целостности при обновлении лежащей в основе представления таблицы, а также согласованность с ними условий в определении представления. При использовании опции LOCAL проверяется целостность данных только в рамках участвующих в определении представлений без сравнения с лежащей в их основе таблицей. Поэтому значительно безопаснее создавать представления с опцией CASCADED, поскольку в таком случае гарантируется ссылочная целостность данных лежащей в основе представлений таблицы.
Обновление данных представления
Данные представления можно обновить при следующих условиях.
• Представление не должно содержать связей.
• Представление не должно содержать выражения GROUP
BY.
• Представление не должно содержать ссылок на псевдостолбец
ROWNUM.
• Представление не должно содержать итоговых функций.
• Не должно использоваться выражение DISTINCT.
• В выражении WHERE не должно быть вложенных выражений со ссылками на ту же таблицу, на
которую ссылается выражение FROM.
По поводу синтаксиса оператора UPDATE обратитесь к тексту урока 14, "Использование подзапросов".
Добавление строк в представление
В представление можно добавлять строки данных с помощью команды INSERT. При этом действуют те же ограничения, что и в случае обновления данных, о котором шла речь выше. По поводу синтаксиса оператора INSERT обратитесь к тексту урока 14.
Удаление строк из представления
Из представления можно удалять строки данных с помощью команды DELETE. При этом действуют те же ограничения, что и в случае применения команд UPDATE и INSERT. По поводу синтаксиса оператора DELETE обратитесь к тексту урока 14.
Связывание представлений с таблицами и другими представлениями
Представление можно связать с таблицами и другими представлениями. При связывании представлений с таблицами и другими представлениями действуют те же правила, что и при связывании таблиц. По поводу связывания таблиц обратитесь в тексту урока 13, "Объединение таблиц в запросах".
Создание таблицы из представления
Из представления можно создать таблицу точно так же, как таблицу можно создать из другой таблицы (или представление из другого представления). Синтаксис соответствующего оператора имеет следующий вид.
CREATE TABLE ИМЯ_ТАБЛИЦЫ AS
SELECT {* | СТОЛБЕЦ1 [, СТОЛБЕЦ2 ]}
FROM ИМЯ_ПРЕДСТАВЛЕНИЯ
[ WHERE УСЛОВИЕ1 [, УСЛОВИЕ2 ]]
[ ORDER BY ]
Для примера создадим представление на основе двух таблиц.
CREATE VIEW ACTIVE_CUSTOMERS AS
SELECT С.*
FROM CUSTOMER_TBL С
ORDERS_TBL О
WHERE C.CUST_ID = O.CUST_ID;
Представление создано.
Теперь создадим таблицу на основе только что созданного представления.
CREATE TABLE CUSTOMER_ROSTER_TBL AS
SELECT CUST_ID, CUST_NAME
FROM ACTIVE_CUSTOMERS;
Таблица создана.
Наконец, выберем данные новой таблицы точно так же, как любой другой.
SELECT *
FROM CUSTOMER_ROSTER_TBL;
CUST_ID CUST_NAME
-----------------------------------
232 LESLIE GLEASON
12 MARYS GIFT SHOP
43 SCHYLERS NOVELTIES
090 WENDY WOLF
287 GAVINS PLACE
432 SCOTTYS MARKET
6 строк выбраны.
He забывайте, что главное различие между таблицей и представлением заключается в том, что таблица содержит реальные данные и занимает физическое пространство, а представление не содержит реальных данных и не требует дополнительного места, кроме места для хранения своего определения (т е соответствующего оператора запроса)
Представления и выражение ORDER BY
В операторе CREATE VIEW использовать ключевое слово ORDER BY нельзя, но в операторе CREATE VIEW можно использовать ключевое слово GROUP BY, дающее тот же результат, что и ORDER BY.
Использовать выражение ключевого слова ORDER BY в операторе SELECT, осуществляющем запрос к представлению, выгоднее и проще, чем использовать GROUP BY в операторе CREATE VIEW.
Рассмотрим следующий пример использования ключевого слова GROUP BY в операторе CREATE VIEW.
CREATE VIEW NAMES2 AS
SELECT LAST_NAME || ', ' || FIRST_NAME || ' ' || MIDDLE_NAME
NAME
FROM EMPLOYEE_TBL
GROUP BY LAST_NAME || ', ' || FIRST_NAME || ' ' ||
MIDDLE_NAME;
Представление создано.
Теперь если выбрать все данные только что созданного представления, они будут представлены в алфавитном порядке (поскольку данные были сгруппированы по
SELECT *
FROM NAMES2;
NAME
------------------------
GLASS, BRANDON S
GLASS, JACOB
PLEW, LINDA С
SPURGEON, TIFFANY
STEPHENS, TINA D
WALLACE, MARIAH
6 строк выбраны.
Для удаления представлений из базы данных используется команда DROP VIEW. У этой команды есть две опции — RESTRICT и CASCADE. Если используется RESTRICT и в условиях имеются зависимые представления, то оператор DROP VIEW возвращает ошибку. При использовании опции CASCADE и наличии зависимых представлений оператор DROP VIEW завершается успешно и все зависимые представления тоже удаляются. Например,
DROP VIEW NAMES2;
Представление удалено.
Синоним — это просто другое имя для таблицы или представления Синонимы обычно создаются таким образом, чтобы пользователь имел возможность не указывать полное имя таблицы или представления другого пользователя. Синонимы можно создавать с атрибутами PUBLIC или PRIVATE. Синоним с атрибутом PUBLIC может использоваться всеми пользователями базы данных, а синоним с атрибутом PRIVATE — только владельцем и теми пользователями, кому были даны соответствующие привилегии.
Синонимы допускаются целым рядом основных реализаций SQL, но стандартом ANSI SQL синонимы не определяются. Ввиду того, что в ряде основных реализаций SQL синонимы используются, кажется разумным провести здесь их краткое обсуждение. По поводу правильного использования синонимов (если они допускаются вообще) лучше обратиться к документации той реализации языка, которую вы используете.
Управление синонимами обычно осуществляет администратор базы данных (или другое уполномоченное лицо) или конкретные пользователи. Ввиду существования двух типов синонимов (PUBLIC и PRIVATE), для их создания могут потребоваться привилегии разного уровня доступа к системе. Любой пользователь имеет возможность создавать синонимы с атрибутом PRIVATE. Право создавать синонимы с атрибутом PUBLIC обычно имеется у администратора или привилегированных пользователей базы данных. По поводу требуемых для создания синонимов привилегий обратитесь к документации той реализации языка, которую вы используете.
Общий синтаксис оператора для создания синонимов следующий.
CREATE [PUBLIC]PRIVATE] SYNONYM ИМЯ_СИНОНИМА FOR
ТАБЛИЦА |ПРЕДСТАВЛЕНИЕ
В следующем примере создается синоним с именем CUST для таблицы CUSTOMER_TBL. Это позволит не печатать полное имя таблицы каждый раз при ее использовании.
CREATE SYNONYM CUST FOR CUSTOMER_TBL;
Синоним создан.
SELECT CUST_NAME FROM CUST;
CUST_NAME
---------------------------
LESLIE GLEASON
NANCY BUNKER
ANGELA DOBKO
WENDY WOLF
MARYS GIFT SHOP
SCOTTYS MARKET
JASONS AND DALLAS GOODIES
MORGAN CANDIES AND TREATS
SCHYLERS NOVELTIES
GAVINS PLACE
HOLLYS GAMEARAM
HEALTHERS FEATHERS AND THINGS
RAGANS HOBBIES
ANDYS CANDIES
RYANS STUFF
15 строк выбраны.
Обычно владельцы таблиц, доступ к которым разрешается другим пользователям, создают для таких таблиц синонимы, чтобы другим пользователям не приходилось печатать полное имя таблицы с указанием владельца.
CREATE SYNONYM PRODUCTSJTBL FOR USER1.PRODUCTS_TBL;
Синоним создан.
Удаление синонимов подобно удалению любого другого объекта базы данных. Общий синтаксис оператора для удаления синонима следующий.
DROP [PUBLIC|PRIVATE] SYNONYM ИМЯ_СИНОНИМА
Вот пример:
DROP SYNONYM CUST
Синоним удален.
В ходе этого урока обсуждались представления и синонимы. Часто использованием этих возможностей пренебрегают, хотя во многих случаях они могут существенно ускорить работу пользователя с базой данных. Представления определяются как виртуальные таблицы, т. е. объекты, выглядящие и ведущие себя как таблицы, но не требующие места для хранения данных. Представления обычно определяются как запросы к таблицам или другим представлениям базы данных. Представления используют для ограничения пользователя в доступе к данным или для отображения данных в требуемом виде (например, для подведения итогов по извлекаемым данным). Представления можно создавать на основе других представлений, но при этом не следует создавать слишком много уровней зависимости, поскольку при этом возрастает риск потери контроля. При создании представлений соответствующий оператор допускает ряд опций, которые могут зависеть от реализации языка.
В этой главе обсуждались также синонимы — объекты базы данных, представляющие другие объекты. Синонимы используются для упрощения имен других объектов базы данных, например, при создании более короткого синонима имени для объекта с длинным именем или при создании синонима для объекта, к которому необходим доступ, но владельцем которого является другой пользователь. Синонимы бывают двух типов — PUBLIC и PRIVATE. Синоним с атрибутом PUBLIC доступен всем пользователям базы данных, а синоним с атрибутом PRIVATE — отдельному пользователю. Синонимы с атрибутом PUBLIC обычно создаются администратором базы данных, а обычные пользователи обычно создают синонимы с атрибутом PRIVATE для своих собственных нужд.
Как это представление может содержать данные и не требовать места для их хранения?
Представление на самом деле не содержит данных Представление представляет собой виртуальную таблицу или сохраненный запрос. Поэтому представление требует только место для хранения создающего представление оператора запроса, обычно называемого определением представления.
Что случится, если таблица, на основе которой строится представление, будет удалена?
Представление окажется несостоятельным, поскольку данные для отбора перестанут существовать.
Существуют ли какие-либо ограничения на имена синонимов при их создании?
Это зависит от реализации языка. В большинстве реализаций имена синонимов должны удовлетворять тем же ограничениям, что и имена таблиц и других объектов базы данных.
Задания практических занятий разделены на тесты и упражнения. Тесты предназначены для проверки общего уровня понимания рассмотренного материала. Упражнения дают возможность применить на практике идеи, обсуждавшиеся в ходе текущего урока, в комбинации с идеями из предыдущих уроков. Мы рекомендуем ответить на тестовые вопросы и выполнить упражнения прежде, чем продолжать дальнейшее чтение книги. Ответы можно проверить по Приложению Б, "Ответы".
1. Можно ли удалить строку данных из представления, созданного на основе данных нескольких таблиц?
2. При создании таблицы ее владелец автоматически получает соответствующие привилегии в отношении этой таблицы. Верно ли это в случае создания представлений?
3. Какое выражение используется для упорядочения данных при создании представления?
4. Какая опция может быть использована для создания представления из другого представления, если необходимо гарантировать целостность данных?
5. При попытке удаления представления было получено сообщение об ошибке ввиду того, что имелись зависимые представления. Что нужно сделать, чтобы все-таки удалить представление?
1. Запишите оператор, создающий представление на основе всех данных таблицы EMPLOYEEJTBL.
2. Запишите оператор, создающий представление, возвращающее среднюю почасовую оплату и среднюю зарплату по каждому из городов для таблицы
EMPLOYEEJTBL.
3. Запишите операторы, удаляющие представления, созданные в результате выполнения пп. 1 и 2.