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

Ознакомившись с тем, как создаются и используются представления, проанализируем более подробно процедуру выполнения запроса, обращающегося к некоторому представлению. Для иллюстрации процесса замены представления оператором SQL рассмотрим приведенный ниже запрос, предназначенный для подсчета сдаваемых в аренду объектов, за которые отвечает каждый из работников отделения компании с номером 'В00З'. Этот запрос обращается к представлению StaffPropCnt, определение которого приведение в описании примера "Представление, формируемое путем группирования и соединения":

SELECT staffNo, cnt FROM StaffPropCnt WHERE branchNo = 'В00З' ORDER BY staffNo;

Замена представления заключается в слиянии приведенного выше запроса с определяющим запросом представ пения Staff PropCnt и выполняется следующим образом:

1. Имена столбцов, указанные з списке конструкции SELECT запроса, преобразуются в соответствующие им имена столбцов определяющего запроса. В результате конструкция SELECT приобретает следующий вид:

SELECT s.staffNo AS staffNo, COUNT(*) AS cnt

2. Имена представлений, указанные в конструкции FROM запроса, замещаются соответствующими списками из конструкций FROM определяющего запроса:

FROM Staff s, PropertyForrRent p

3. Конструкция WHERE исходного запроса пользователя объединяется с конструкцией WHERE из определяющего запроса представления с помощью логического оператора AND:

WHERE s.staffNo = p.staffNo AND branchNo = 'B003'

4. Конструкции GROUP BY и HAVING из определяющего запроса представления просто копируются в исходный запрос. В нашем примере в определяющем запросе присутствует только конструкция GROUP BY:

GROUP BY s.staffNo, s.branchNo

5. В объединенный запрос копируется конструкция ORDER BY из исходного запроса, в котором имена столбцов представления преобразованы в имена столбцов определяющего запроса:

ORDER BY s.staffNo

6. В результате всех перечисленных выше операций объединенный запрос приобретает следующий вид:

SELECT s.staffNo AS staffNo, COUNT (*) AS cnt FROM Staff s, PropertyForRent p WHERE s.staffNo = p.staffNo AND branchNo = 'B003' GROUP BY s.staffNo, s.branchNo ORDER BY S.staffNo;


Результаты выполнения объединенного запроса представлены в таблице

staffNo cnt
SG14  
SG37  
[показать] Ограничения на использование представлений
[показать] Обновление данных в представлениях

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: