Материал: Graber_Martin_-_SQL_dlya_prostykh_smertnykh_-_2014

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Глава 20. Введение в представления

FROM Elitesalesforce а

WHERE 10 <=

(SELECT-COUNT (•)

FROM Elitesalesforce Ь

WHERE a.snum = b.snum);

Извлечь из этой таблицы продавца, получившего вознаграждение, можно, введя

следующий запрос:

SELECT •

FROM Bonus;

Д.1я того чтобы извлечь такую информацию с использованием RPG или COBOL, потребовалась бы довольно большая программа. В SQL мы использовали для этого

две сравнительно сложные команды, которые хранятся как определение представле­

ния и один простой запрос. Все, что нужно делать ежедневно, - это выполнять по­ следний элементарный запрос, поскольку информация, которую он извлекает,

отражает текущее состояние базы данных.

Что нельзя сделать с помощью представлений?

Существует много типов представлений (включая примеры, рассмотренные в этой главе), которые выполняют только чтение. Это значит, что для них могут быть сформу­ лированы запросы, но их нельзя использовать в качестве объекта для команд обновле­ ния (эта тема рассматривается подробнее в главе 21).

Существует несколько аспеь."Тов в области запросов, которые не укладываются в рамки определений представления: единственное представление должно базироваться на единственном запросе; UNION и UNION ALL недопустимы. ORDER ВУ тоже нельзя использовать в определении представления. Выходные данные для запроса, формирующего представление, должны быть неупорядоченными по определению.

Удаление представлений

Синтаксис исключения представления из базы данных сходен с синтаксисом для исключения базовых таблиц:

DROP VIEW <имя представления>

Здесь нет необходимости сначала удалить все содержимое, как это требовалось для базовых таблиц, поскольку содержимое представления никогда явно не определяется, а сохраняется в процессе выполнения отдельной команды. На базовые таблицы, на ос­

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

220

Итоги

Итоги

Теперь вы можете использовать представления. Почти все, что можно создать

спонтанно с помощью запроса, определяется в виде постоянного представления. За­ просы для этих представлений являются, по сути, запросами к запросам. Представле­ ния широко применяются на практике для удобства, для поддержания защиты, для форматирования и вывода значений и даже для изменения содержимого базы данных. Еще один важный вопрос, касающийся представлений, - их обновляемость, которая по мере обновления базовых таблиц возможна не во всех случаях. Подробнее мы по­ говорим об этом в главе 21 .

221

Работае.м на SQL

l. Создайте представление, показывающее всех покупателей с наивысшими рей­

тингами.

2.Создайте таблицу, которая показывает количество продавцов в каждом городе.

3.Создайте представление, которое показывает общее и среднее количество заявок

для каждого продавца после его имени. Предполагается, что все имена являются

уникальными.

4.Создайте представление, которое показывает каждого продавца вместе со всеми

его покупателями.

(Ответы см. в приложении А.)

222

Изменение значений

с помощью

представлений

Глава 21. Изменение з11ачений с помощью представлений

В этой главе речь идет о командах обновления DML - INSERT, UPDATE и

DELETE - применительно к представлениям. Как упоминалось ранее, использова­ ние команд обновления в представлениях является опосредованным способом приме­ нения их для таблиц, на которые ссылаются запросы, соответствующие представлениям. Не все представления можно обновлять. Вы ознакомитесь с прави­ лами, в соответствии с которыми можно определить, подлежит ли представление об­ новлению, а также с вопросами их практического применения. Вы научитесь употреблять предложение WIТH СНЕСК OPТION, управляющее специфическими значениями, которые можно ввести в таблицу, используя представление. В некоторых

случаях это может оказаться желательной альтернативой непосредственным ограни­

чениям таблицы.

Обновление представлений

Одним из наиболее сложных и неоднозначных аспектов представлений является их применение в командах обновления DML. Эти команды непосредственно воздейству­ ют на базовую таблицу представления, что создает своего рода противоречие. Пред­ ставление состоит из результатов запроса, и при его обновлении обновляется все множество результатов запросов. Оно воздействует на значения в таблице (в табли­ цах), для которых выполняется запрос, и, следовательно, изменяет его выходные дан­ ные, не воздействуя на запрос как таковой. Следующее предложение создаст представление, показанное на рис. 21.1:

CREATE VIEW Citymatch (custcity, salescity)

AS SELECT DISTINCT a.city, b.city

FROM Customeгs а, Salespeople Ь

WHERE a.snum = b.snum;

Представление показывает все пары покупателей с продавцами или, по крайней мере, одного покупателя в городе custcity, который обслуживается продавцом из горо­

да salescity.

Например, одна строка этой таблицы - Loпdon London - определяет, что имеет­ ся, по крайней мере, один покупатель в Лондоне, которого обслуживает продавец из Лондона. Эта строка относится к паре Hoffшan с его продавцом Рее\, оба они из Лон­ дона. Однако, такое же значение получается и для пары Clemens, тоже находящейся в Лондоне со своим продавцом, которым опять же является Peel. Поскольку в запросе указано ключевое слово DISTINCT, в состав выходных данных включается только одна составная строка с этими значениями. Но какую пару из лежащих в основе таб­ лиц она представляет?

Даже если не использовать ключевое слово DISТINCT, ответ на вопрос не будет получен, поскольку в представлении были бы две абсолютно одинаковые строки, и нельзя узнать, какая строка представления из какой реальной строки базовой таблицы

224

Источник: https://studfile.net/preview/16418473/