Популярные услуги

Использование представлений

2021-03-09СтудИзба

18. Использование представлений

18.1.  Что такое представление

Представление – это виртуальные таблицы. В отличие от таблиц, содержащих данные, представления содержат запросы, которые динамически выбирают данные, когда это необходимо.

Был рассмотрен пример, в котором извлеклась информация о клиентах, которые заказали указанный продукт.

            SELECT cust_name, cust_contact

            FROM Customers, Orders, OrderItems

            WHERE Customers.cust_id = Orders.cust_id

               AND OrderItems.order_num = Orders.order_num

              AND prod_id = ‘RGAN01’;

Рекомендуемые материалы

-66%
Вариан 24 - ДЗ №3 - Программирование на С++ с использованием классов
-66%
Вариант 11 - ДЗ №3 - Программирование с использованиемклассов в С++
-82%
Вариант 24 - ЛР №9 - Программирование с использованием библиотеки Qt
-82%
Вариант 24 - ЛР №5 - Использование указателей при работе со строками С++
Домашнее задание №1 "Программирование с использованием классов. Графика. Обработка события нажатия клавиши мыши. Наследование. Полиморфизм" (вариант №28)
Домашнее задание №3 "Программирование с использованием классов в С++" (вариант №11)

Чтобы извлечь данные для другого продукта или для нескольких продуктов, предложение WHERE необходимо модифицировать.

Можно сохранить весь этот запрос в виртуальной таблице с именем ProductCustomers. Затем для выборки тех же самых данных нужно было бы сделать следующий запрос.

            SELECT cust_name, cust_contact

            FROM ProductCustomers

            WHERE prod_id = ‘RGAN01’;

Таблица ProductCustomers является представлением, она не содержит каких-либо столбцов или данных. Вместо них хранится запрос – то самый запрос, который был использован для объединения таблиц. Для создания этого запроса и служит представление.

            CREATE VIEW ProductCustomers AS

SELECT cust_name, cust_contact, prod_id

            FROM Customers, Orders, OrderItems

            WHERE Customers.cust_id = Orders.cust_id

               AND OrderItems.order_num = Orders.order_num;

           

Представления применяются для выполнения следующих операций:

· для повторного использования операторов SQL;

· для упрощения выполнения сложных операций. После того как запрос подготовлен, его можно с легкостью использовать повторно, для этого не нужно разбираться в особенностях его работы;

· для вывода частей таблицы вместо вывода ее полностью;

· для защиты данных. Пользователям можно представить доступ к определенному поднабору таблиц, а не ко всем таблицам;

· для изменения формирования и отображения данных. Представления могут возвращать данные, отформатированные и отображенные иначе, чем они хранятся в таблицах.

После того как представления созданы, их можно использовать точно так же как таблицы. Можно выполнять операции SELECT, фильтровать и сортировать данные, объединять представления с другими представлениями или таблицами и, возможно, даже добавлять в них данные либо обновлять их.

18.2.  Создание представления

Представление создаются с помощью оператора CREATE VIEW. Оператор можно использовать только для создания представления, которого не существовало.

Для удаления представления используется оператор DROP VIEW.

Чтобы переписать или обновить представление, вначале нужно применить по отношению к нему оператор DROP, а затем заново создать представление.

Надо понимать, что представления – это только представления, данные которых, хранятся в других таблицах. Представления не содержат данных как таковых, поэтому данные, которые они возвращают, извлекаются из других таблиц. Если данные этих таблиц изменяются или происходит добавление в них данные, представления возвратят уже новые, измененные данные.

При создании представлений необходимо учитывать следующие ограничения.

· Представления, так же как и таблицы, должны иметь уникальные имена.

· Не существует ограничения на количество представлений, которые могут быть созданы.

· Для того чтобы создать представление, необходимо иметь соответствующие права доступа, которые предоставляет администратор базы данных.

· Представления могут быть вложенными, это означает, что представление может быть создано посредством запроса, который выбирает данные из другого представления.

· Во многих СУБД запрещается использование предложения ORDER BY в запросах к представлениям.

· В некоторых СУБД требуется, чтобы каждый возвращаемый столбец имел имя – это подразумевает использование псевдонимов, если столбцы представляют собой вычисляемые поля.

· Представления не могут быть проиндексированы. Они также не могут иметь триггеров или связанных с ними значений по умолчанию.

· В некоторых СУБД представления трактуются как запросы, предназначенные только для чтения. Это означает, что из представлений можно выбирать данные, но их нельзя вносить в таблицы, на основе которых было создано представление.

· Некоторые СУБД позволяют создавать представления, которые не позволяют добавлять или обновлять строки, если это добавление или обновление может привести к тому, что строки уже не будут являться частью данного представления.

18.3.  Использование представлений для упрощения сложных объединений

Часто представления используются для упрощения работы с SQL, и нередко это относится к объединениям.

В качестве примера создадим представление ProductCustomers, которое объединяет три таблицы с целью возращения списка клиентов, заказавших какой-то продукт.

            CREATE VIEW ProductCustomers AS

SELECT cust_name, cust_contact, prod_id

            FROM Customers, Orders, OrderItems

            WHERE Customers.cust_id = Orders.cust_id

               AND OrderItems.order_num = Orders.order_num;

В Access оператор CREATE VIEW выдает ошибку – не работает.

Можно выполнить это в виде создания таблицы.

SELECT *

INTO ProductCustomers

FROM (SELECT cust_name, cust_contact, prod_id

                          FROM Customers, Orders, OrderItems

                          WHERE Customers.cust_id = Orders.cust_id

                 AND OrderItems.order_num = Orders.order_num);

Если использовать оператор SELECT * FROM ProductCustomers, то список будет содержать любого клиента, который сделал заказ.

Для выбора списка клиентов, заказавших продукт RGAN01, нужно выполнить запрос.

            SELECT cust_name, cust_contact

            FROM ProductCustomers

            WHERE prod_id = ‘RGAN01’;

---------------------------------------------------------

            cust_name                  cust_contact

            Fun4All                      Denise L. Stephens

The Toy Store             Kim Howard

Этот запрос возвращает указанные данные из представления в результате применения предложения WHERE. Когда СУБД обрабатывает запрос, она добавляет указанное предложение WHERE к каждому уже существующему предложению WHERE в запросе к представлению.

Таким образом, представления могут значительно упростить сложные операторы SQL. Используя представления, можно один раз записать код SQL и затем повторно использовать его. Хорошей идеей является создание представлений, не привязанных к конкретным данным. Как в примере, представление возвращает имена всех клиентов, заказавших продукты, а не только конкретный продукт.

18.4.  Использование представлений для переформатирования выбранных данных

Другим частным случаем использования представления является переформатирование данных.

Рассмотрим следующий запрос.

            SELECT RTRIM(vend_name) + ‘(‘+RTRIM(nend_country)+’)’ AS vend_title

            FROM Vendors

ORDER BY vend_name;

----------------------------------------

vend_title

Bear Emporium (USA)

Bears R Us (USA)

Doll House Inc. (USA)

Fun and Games (England)

Furball Inc. (USA)

Jouets et ours (France)

Если регулярно требуются результаты в таком формате, то вместо того, чтобы выполнять объединение каждый раз, когда в этом возникает необходимость, можно создать представление и использовать его вместо объединения.

            CREATE VIEW VendorLocations AS SELECT RTRIM(vend_name) +

 ‘(‘+RTRIM(nend_country)+’)’ AS vend_title

            FROM Vendors;

Замена в Access.

SELECT *

INTO VendorLocations

FROM (SELECT RTRIM(vend_name)+'('+RTRIM(vend_country)+')' AS vend_title

            FROM Vendors);

Посредством этого оператора создается представление. Для извлечения данных необходимо выполнить.

            SELECT *

            FROM VendorLocations;

            -----------------------------

Bear Emporium (USA)

Bears R Us (USA)

Doll House Inc. (USA)

Fun and Games (England)

Furball Inc. (USA)

Jouets et ours (France)

18.5.  Использование представлений для фильтрации нежелательных данных

Представления могут также оказаться полезными для применения общих предложений WHERE.

Рассмотрим пример, необходимо определить представление таки образом, чтобы оно отфильтровывало клиентов, не имеющих адреса электронной почты.

            SREATE VIEW CustomerEMailList AS

            SELECT cust_id, cust_name, cust_email

            FROM Customers

WHERE cust_email IS NOT NULL;

            Замена в Access.

SELECT *

INTO CustomerEMailList

FROM (SELECT cust_id, cust_name, cust_email

                          FROM Customers

  WHERE cust_email IS NOT NULL);

Предложение WHERE отфильтрует строки, имеющие значения NULL в столбцах cust_email.

Представление CustomerEMailList можно использовать подобно любой другой таблицы.

            SELECT *

            FROM CustomerEMailList;

            ----------------------------------------

            cust_id                                   cust_name                  cust_email

            1000000001               Village Toys   sales@villagetoys.com

            1000000003               Fun4All          jjones@fun4all.com

            1000000004               Fun4All          destephens@fun4all.com

18.6.  Использование представлений с вычисляемыми полями

Представления полезны для упрощения использования вычисляемых полей.

Рассмотрим пример, необходимо извлечь предметы указанного заказа и вычислить суммарную стоимость для каждого предмета.

            SELECT prod_id,

              quantity,

              item_price,

              quantity*item_price AS expanded_price

            FROM OrderItems

            WHERE order_num = 20008;

            --------------------------------------------

            prod_id           quantity          item_price       expanded_price

            RGAN01        5                      4.99p.              24.95p.

BR03              5                      11.99p.            59.95p.

BNBG01        10                    3.49p.              34.90p.

BNBG02        10                    3.49p.              34.90p.

BNBG03        10                    3.49p.              34.90p.

Создадим представление.

            CREATE VIEW OrderItemsExpanded AS

            SELECT order_num,

               prod_id,

               quantity,

               item_price,

               quantity*item_price AS expanded_price

            FROM OrderItems;  

Замена в Access.

SELECT *

INTO OrderItemsExpanded

FROM (SELECT order_num,

                           prod_id,

                           quantity,

                           item_price,

                           quantity*item_price AS expanded_price

             FROM OrderItems);

Чтобы получить информацию относительно заказа 20008 необходио выполнить запрос.

            SELECT *

            FROM OrderItemsExpanded

            WHERE order_num = 20008

------------------------------------------------

            order_num      prod_id           quantity          item_price       expanded_price

Рекомендация для Вас - Введение. Основные термины и определения.

            20008              RGAN01        5                      4.99p.              24.95p.

20008              BR03              5                      11.99p.            59.95p.

20008              BNBG01        10                    3.49p.              34.90p.

20008              BNBG02        10                    3.49p.              34.90p.

20008              BNBG03        10                    3.49p.              34.90p.

Таким образом, представления – это виртуальные таблицы. Они не содержат данных, вместо данных представления содержат запросы, посредством которых данные выбираются в случае необходимости. Представления обеспечивают должный уровень инкапсуляции SQL-операторов SELECT и могут быть использованы для упрощения манипулирования данными. Основное назначение представления – это существенно упростить сложные манипуляции с данными.

Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6264
Авторов
на СтудИзбе
317
Средний доход
с одного платного файла
Обучение Подробнее