Ознакомившись с тем, как создаются и используются представления, проанализируем более подробно процедуру выполнения запроса, обращающегося к некоторому представлению. Для иллюстрации процесса замены представления оператором 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 cnt2. Имена представлений, указанные в конструкции FROM запроса, замещаются соответствующими списками из конструкций FROM определяющего запроса:
|
|
3. Конструкция WHERE исходного запроса пользователя объединяется с конструкцией WHERE из определяющего запроса представления с помощью логического оператора AND:
WHERE s.staffNo = p.staffNo AND branchNo = 'B003'4. Конструкции GROUP BY и HAVING из определяющего запроса представления просто копируются в исходный запрос. В нашем примере в определяющем запросе присутствует только конструкция GROUP BY:
GROUP BY s.staffNo, s.branchNo5. В объединенный запрос копируется конструкция ORDER BY из исходного запроса, в котором имена столбцов представления преобразованы в имена столбцов определяющего запроса:
ORDER BY s.staffNo6. В результате всех перечисленных выше операций объединенный запрос приобретает следующий вид:
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 |
[показать] Ограничения на использование представлений |
[показать] Обновление данных в представлениях |