410013796724260
• Webmoney
R335386147728
Z369087728698
Create ViewПредставление View — это виртуальная таблица, оформленная в виде запроса типа SELECT, который будет подставлен как подзапрос при использовании View. В отличие от обычных таблиц реляционных СУБД, виртуальная таблица View не является самостоятельной частью набора данных, хранящегося в базе. Содержимое представления формируется динамически на основании данных, находящихся в реальных таблицах. Изменение данных в реальных таблицах отражается в содержимом всех представлений, использующих эти таблицы в своих запросах. Описание View для СУБД, поддерживающих язык запросов SQL, представляет собой запрос. Поэтому, содержимое представления — это результат выполнения данного запроса. Так, для типичных СУБД типа Oracle, MSSQL, PostgreSQL, Interbase, Firebird, MySQL, Derby представление может содержать :
Создание представления, CREATE VIEWДля создания представления необходимо использовать команду CREATE VIEW, включающую необязательное наименования схемы (schema_name), наименование представления, необязательные наименования колонок (column_name) ключевое слова AS и далее текст SQL-запроса : CREATE VIEW [schema_name.]view_customers [(column_name [, …])] AS select name, address, phone from [schema.]customers [where city = 'Moscow']; [WITH CHECK OPTION] Схема, в которой создается представление VIEW, может отличаться от схемы с таблицей/ами, определенными в запросе. В этом случае необходимо помнить, что пользователи данного представления должны иметь доступ ко всем "представленным" во View объектам. SQL-запрос представления может включать не только таблицы и условия "where", но также и другие представления. Выражение WITH CHECK OPTION предназначено для предварительного выполнения проверки, если SQL-запрос представления включает определенные условия и используется для внесения изменений в основную таблицу. Представление можно использовать в тексте SQL-запроса как обычную таблицу. -- запрос без дополнительных условий select * from view_customers; -- запрос с дополнительными условиями select name, phone from view_customers where address like '%ВДНХ%'; SQL представление с подзапросамиПредставление VIEW может включать подзапросы. В качестве примера рассмотрим задачу определения в компании менеджеров, заказы которых превысили определенную сумму (50000) : CREATE VIEW view_managers AS select o.odate, o.order_id, o.total, m.manager_id, m.name from orders o, managers m where m.manager_id = o.manager_id and o.order_id in (select order_id from orders c where c.odate = o.odate and c.total > 50000); Теперь, если потребуется определить менеджера с самым высоким заказом в определенный период времени, то можно использовать простой запрос с включением в него VIEW : select odate, manager_id, name, MAX(total) from view_managers m where m.odate between '2015-01-01' and '2015-12-31' group by odate, manager_id, name; SQL представление с группировкой данныхЗаписи в запросе представления VIEW можно сгруппировать, получив, таким образом, групповое представление. В качестве примера можно рассмотреть представление, формирующего статистическую информацию : CREATE VIEW stat_orders select odate, MAX(total), MIN(total), AVG(total), SUM(total), COUNT (order_id) from orders group by odate; Использование данного VIEW позволяет получить всю статистическую информацию по заказам за день : select * from stat_orders; Представления предоставляют чрезвычайно гибкий и мощный инструмент для определения порядка использования данных. Кроме этого, VIEW позволяют облегчить работу более простым, переформатированием данных. Удаление представления, DROP ViewСинтаксис удаления представления из базы данных включает ключевые слова DROP VIEW. При необходимости нужно указать наименование схемы : DROP VIEW [schema_name.]view_name Следует помнить, что для удаления представления нужно иметь соответствующие права. Изменение значений с помощью VIEWКоманды изменения значений в таблицах базы данных DML (Insert, Update, Delete) можно использовать и с представлениями. Но не все представления позволяют сделать это. Основные критерии, по которым можно сказать, что с помощью данного представления можно модифицировать данные, следующие:
Примеры CREATE VIEW-- Представление только для чтения, т.к. присутствует GROUP BY CREATE VIEW view_orders (odate, total) AS select odate, SUM (total) as total from orders group by odate; -- Представление позволяет модифицировать данные CREATE VIEW view_customers AS select * from customers where country = 'Germany'; -- Представление только для чтения, т.к. присутствует выражение в последнем поле CREATE VIEW managers_tver AS select id, name, num, comm * 100 from managers where city = 'Tver'; Проверка значения при модификацииВ следующем примере представление делает выборку записей заказов, в которых сумма превышает заданное значение (5000) : CREATE VIEW order_5000 AS select order_id, odate, onumber, total from orders where total > 5000; Данное представление ограничивает доступ к определенным заказам в таблице и позволяет модифицировать данные. Для вставки записи необходимо использовать следующий SQL-скрипт : INSERT INTO order_5000 VALUES (123456, '2015-11-23', '20151123/24', 2000); Данный скрипт будет выполнен и запись будет добавлена в таблицу. Однако с помощью данного представления "order_5000" мы это не увидим, т.к. данная запись не попадет в результирующий набор в виду ограничения на значение поля "total". Чтобы гарантировать выполнение проверки значений перед записью следует в скрипте создания представления использовать ключевое выражение WITH CHECK OPTION, т.е. с опцией проверки. Вышеупомянутая вставка будет отклонена следующим VIEW : CREATE VIEW order_5000_check AS select order_id, odate, onumber, total from orders where total > 5000 WITH CHECK OPTION; Необходимо отметить, что выражение WITH CHECK OPTION не делает каскадированного изменения. Оно применяется только в представлениях в которых оно определено, но не в представлениях основанных на этом представлении. Исключенные поля представленияНеобходимо быть аккуратным при использовании представления с условиями для вставки записей. Рассмотрим такое представление, в котором поле страны "country" отсутствует. CREATE VIEW customers_germany AS select id, name, address, phone from customers where country = 'Germany'; Внешне все нормально и представление можно использовать для внесения изменений в записи таблицы. Но вот как быть с "country", которое отсутствует в полях набора? Что будет при вставке записи через данное представление, если "country" не допускает ввода нулевых (NULL) значений? А как вообще управлять этим полем "country" в основной таблице, не создавать же под каждую страну свое представление. Ответа на данные вопросы не последует, они очевидные. Полагаю, что Вы не будете создавать подобные представления, которые будут Вас ограничивать при выполнении определенных транзакций. |