|
Программирование >> Построение запросов sql
4.5. Представления Представление - это виртуальная таблица, созданная на основе запроса из базовой таблицы. Представление, как и реальная (базовая) таблица, содержит строки и столбцы данных, но данные, видимые в представлении, на самом деле являются результатами запроса. Одной из операций над представлениями является их непосредственное использование с запросами модификации DML: INSERT, UPDATE и DELETE. Если к представлению могут быть успешно применены данные запросы, то оно называется модифицируемым (или обновляемым). В противном случае представление является представлением только для чтения. Обновление представлений будет подробно рассмотрено позднее после изучения языка манипулирования данными. В запросах SELECT, INSERT, DELETE и UPDATE на представление можно ссылаться как на обычную таблицу. Это дает возможность определять подмножество данных, необходимых конкретному пользователю (или группе пользователей) в дополнение к ограничению доступа к остальной части данных. Представления используются по следующим причинам: - они позволяют сделать так, что разные пользователи БД будут видеть ее по-разному; - с их помощью можно ограничить доступ к данным, разрешая пользователям видеть только некоторые из строк и столбцов таблицы; - они упрощают доступ к БД, показывая каждому пользователю структуру хранимых данных в наиболее подходящей для него форме. В SQL представления создаются запросом CREATE VIEW, который имеет следующий формат: CREATE VIEW представление ( столбец представления [, столбец представления AS <табличный подзапрос> [WITH CHECK OPTION];. Данный запрос создает представление с именем представление. Параметр WITH CHECK OPTION предотвращает INSERT- или UPDATE- операции над обновляемым представлением, если они нарушают условие отбора строк, определенное в предложении WHERE запроса SELECT (<табличный подзапрос>), используемого при определении данного представления. При необходимости в запросе CREATE VIEW можно задать имя для каждого столбца создаваемого представления, обозначаемое как столбец представления. Если указывается список имен столбцов, то он должен содержать столько элементов, сколько столбцов возвращается запросом. Следует обратить внимание на то, что задаются только имена столбцов; тип данных, длина и другие характеристики берутся из определения столбца в исходной таблице. Если список имен столбцов в запросе CREATE VIEW отсутствует, то каждый столбец представления получает имя соответствующего столбца запроса. Если в запрос входят вычисляемые столбцы или два столбца с одинаковыми именами, то использование списка имен столбцов является обязательным. Например, для создания представления SredSumm с полями Month и Summa, показывающего среднее значение начисленных сумм за месяц, следует выполнить следующий запрос: CREATE VIEW Sred Summ (Mes, Summa) AS SELECT NachislMonth, AVG (NachislSum) FROM NachislSumma GROUP BY 1;. Результат выполнения запроса SELECT * FROM Sred Summ; представлен на рис. 4.4.
Рис. 4.4. Результат запроса к представлению SredSumm Ниже приведен пример создания представления с именем DateAbonent, которое должно показывать ФИО абонентов и дату подачи ими ремонтных заявок: CREATE VIEW Date Abonent (Abonent Name, Data) AS SELECT Fio, IncomingDate FROM Abonent, Request WHERE Abonent.AccountCD = Request. AccountCD;. В СУБД Firebird 2.1 представления могут использовать все конструкции, допустимые для обычного запроса SELECT. Таким образом, возможно использование конструкций FIRST/SKIP, ROWS, UNION, ORDER BY. Например, для создания представления MaxPay с полями AccountCD, BigSum и PayDate, показывающего пять максимальных значений оплаченных сумм, следует выполнить следующий запрос: CREATE VIEW Max Pay (AccountCD, Big Sum, PayDate) AS SELECT FIRST 5 AccountCD, PaySum, PayDate FROM PaySumma ORDER BY PaySum DESC;. Результат выполнения запроса SELECT * FROM Max Pay;
Рис. 4.5. Результат запроса к представлению MaxPay Физически представление в БД хранится в виде его определения, т.е. текста того запроса CREATE VIEW, который был использован при создании представления. Когда СУБД встречает в SQL-запросе ссылку на представление, она отыскивает его определение, сохраненное в БД. Затем преобразует пользовательский запрос, ссылающийся на представление, в эквивалентный запрос к исходным таблицам представления (заданным в запросе SELECT представления) и выполняет этот запрос. Таким образом, СУБД создает иллюзию существования представления в виде отдельной таблицы и в то же время сохраняет целостность исходных данных. Представление может служить неким окном для просмотра данных. Любые изменения в исходных данных (т.е. в данных таблиц, на основе которых создано представление) будут автоматически и мгновенно отображаться в представлении, и наоборот, все изменения, вносимые в данные представления, будут автоматически вноситься в исходные данные и соответственно отображаться в представлении. По виду запроса, используемого представлением, различают следующие виды представлений: - горизонтальные; - вертикальные; - смешанные; - сгруппированные; - соединенные. Горизонтальное представление представляет собой горизонтальное подмножество строк одиночной таблицы и предназначено для ограничения доступа к строкам таблицы. Запрос в таком представлении выбирает все столбцы заданной таблицы, но ограничивает выбор строк указанием условия поиска в предложении WHERE запроса SELECT. Например, для создания представления, показывающего все ремонтные заявки по неисправности с кодом, равным 1, следует выполнить следующий запрос: CREATE VIEW Failure Req AS SELECT * FROM Request WHERE FailureCD = 1;. При выполнении следующего запроса SELECT * FROM Failure Req;
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |