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

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

Работаем на SQL

1.Создайте таблицу с именем Cityorders. В ней должны быть поля onum, amt, snum, как и в таблице Orders, и поля cnum и city, как в таблице Customers, при этом каж­ дый заказ покупателя должен храниться вместе с названием его города. Поле

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

имеют соответствующие ограничения.

2.Расширим проблему. Переопределим таблицу Orders таким образом: добавим новый столбец с именем prev, который идентифицирует onum предыдущего за­ каза для текущего пользователя. Реализуйте это как внешний ключ, ссылающий­ ся на ту таблицу, в которой он определен (таблицу Orders). Внешний ключ должен ссылаться на поле cnum покупателя, обеспечивая связь между текущим

заказом и тем, на который он ссылается.

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

210

20

1]

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

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

Представление (view) - объект, который не содержит собственных данных. Это

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

водит к соответствующим изменениям в представлениях.

Из этой главы вы узнаете, что такое "представления", как они создаются, и кое-что об их ограничениях и защите. Использование представлений базируется на возможно­ стях расширенных запросов, таких как соединения и подзапросы. Они будут рассмот­ рены более подробно, поскольку есть ряд существенных деталей, касающихся связи запросов и представлений.

Что такое представления?

Таблицы, о которых шла речь до сих пор, будут теперь называться базовы.111и табли­ ца.11ш (base taЬ/es). Это таблицы, которые содержат реальные данные. Существует и дру­ гой вид таблиц, получивший название "представления" (views). Представления - это таблицы, содержимое которых берется или выводится из других таблиц. Они использу­ ются в запросах и в предложениях DML так же, как и обычные таблицы, но они не со­ держат своих собственных данных. Представления подобны окнам, через которые просматривается информация, реально хранимая (содержащаяся) в базовых таблицах. В действительности же это запросы, выполняемые всякий раз, когда представление явля­ ется объектом команды. В этот момент выходные данные запроса и становятся содер­

жимым представления.

Команда CREATE VIEW

Представление определяется с помощью команды CREATE VIEW, состоящей из ключевых слов CREATE VIEW (создать представление), имени создаваемого пред­ ставления и ключевого слова AS, после которого следует запрос.

Например:

CREATE VIEW Londonstaff

AS SELECT *

FROM Salespeople

WHERE city = 'London·;

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

называемого Londonstaff. Как и любую другую таблицу представление можно исполь­

зовать: формулировать к нему запросы, выполнять обновление, вставку, удаление и соединение с другими таблицами и представлениями. Давайте сформулируем запрос для просмотра представления (см. рис. 20.1):

212

Команда CREATE VJEW

Рис. 20.1. Представление Londonstaff

SELECT •

FROM Londonstaff;

При команде выбрать все строки из представления выполняется запрос, содержа­ щийся в определении Londonstaff, и возвращаются все его выходные данные. Если в

запросе для представления указан предикат, то представление содержит только стро­

ки, вошедшие в состав выходных данных {удовлетворяющие заданному предикату). Преимущество использования представления вместо базовой таблицы состоит в

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

вы ссылаетесь на представление в команде. Если завтрадобавится еще один продавец,

находящийся в Лондоне (city = 'London'), то он автоматически попадет в nредставле-

ние.

Представления значительно расширяют возможности управления данными. Они

предоставляют пользователям доступ не ко всей информации, хранящейся в таблице, а только к ее части. Если нужно, чтобы каждый продавец мог просмотреть таблицу Sa\espeople, но не мог видеть значения комиссионных, можно создать представление с помощью следующего предложения (результат представлен на рис. 20.2):

CREATE VIEW Salesown

AS SELECT snum,sname,city

FROM Salespeople;

213

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

Рис. 20.2. Представление Salesown

Другими словами, это представление есть то же самое, что и таблица Salespeople, за исключением столбца comm, имя которого не указано в запросе и, следовательно,

не включено в представление.

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

Это представление можно модифицировать командами обновления DML, но моди­ фикации воздействуют не на само представление, а только на лежащую в его основе таблицу:

UPDATE Salespeople

SET city = 'Palo Alto'

WHERE snum = 1004;

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

ных с помощью команды UPDATE:

UPDATE Salesown

SET comm = .20

WHERE snum = 1004;

214

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