198.98K
Category: databasedatabase

Представления (VIEW)

1.

Представления
(VIEW)

2.

Представления (VIEW) – это способ вывода ограниченного или расширенного набора
столбцов из реальной таблицы в виде виртуальной таблицы.
Практика показывает, что представления используются, либо слишком часто, либо
слишком редко, т.е. очень редко встречаются базы, где бы использование представлений
было бы оправданно. Однако представления позволяют достичь следующих целей:
сократить кажущуюся сложность базы данных для конечных пользователей, обеспечить
доступ пользователей ко всем необходимым данным и вместе с тем запретить доступ к
некоторым столбцам, к которым доступ обычных пользователей нежелателен,
предусмотреть
в
базе
дополнительные
средства
индексации,
повышающие
производительность всей базы.
В действительности же представление – это не что иное, как хранимый запрос.
Удобство состоит в том, что они обеспечивают выборку данных из одной или нескольких
таблиц, обеспечивают согласование данных.

3.

Представление является объектом базы данных, но, в отличие от таблиц, не является
физическим хранилищем данных. Его можно представить как хранимое выражение выборки
с минимальным набором свойств. Удаление всего представления как объекта никак не
повлияет на данные, на основе которых оно построено. В то же время удаление всех
записей в представлении может удалить эти записи в исходных таблицах.
Синтаксическая структура оператора – комбинация рассматриваемых ранее операторов
CREATE , а так же оператора SELECT.
CREATE VIEW <название_представления>
AS
SELECT <описание_оператора…>

4.

Приведем пример простейшего представления, которое будет выводить все имена,
фамилии и отчества всех клиентов:
CREATE VIEW ФИОклиенты
AS
SELECT Фамилия, Имя, Отчество
FROM Клиенты
Теперь проверим полученный результат, путём выборки всей информации из
созданного представления:
SELECT * FROM ФИОклиенты;
Представление можно заменить выборкой следующим запросом:
SELECT Фамилия, Имя, Отчество
FROM Клиенты

5.

В запросах участвующих в создании представлений допускается использование любых
конструкций, таких как WHERE и др. У пользователя, создающего представление, должны
быть разрешения на выборку из соответствующих таблиц.
Можно создать представление на основе других представлений либо представлений и
таблиц. Но есть ограничения. Нельзя использовать в выборке:
◦ предложения ORDER BY, COMPUTE и COMPUTE BY;
◦ предложение INTO;
◦ временную таблицу.
Кроме того,
представлений.
не
следует
использовать
внешние
объединения
при
создании
Представление может ссылаться максимум на 250 столбцов. Команда CREATE VIEW не
может использоваться совместно с другими командами SQL Server в одном пакете команд.
Нельзя создавать представления внутри хранимых процедур. Оператор UNION невозможно
использовать при создании представлений.

6.

Изменения, которые производятся с помощью представлений, могут воздействовать только
на один объект. Пусть представление создано на основе двух таблиц Товары и Заказы.
CREATE VIEW Цены
AS
SELECT Товары.СтоимостьЗакупки, Товары.СтоимостьПродажи,
Товары.НаличиеВПродаже, Заказы.КодТовара
FROM Товары, Заказы
WHERE Заказы.КодСклада = Товары.КодСклада
Если в запросе, который используется для создания представления, присутствуют
выражения, встроенные функции или функции агрегирования, то изменить данные вы не
сможете. Что вполне логично, так как нет столбцов в исходных таблицах, связанных со столбцами
в представлении.

7.

В следующем примере используется функция агрегирования:
CREATE VIEW Цены
AS
SELECT Товары.СтоимостьЗакупки,Товары.СтоимостьПродажи,Товары.НаличиеВПродаже,
Заказы.КодТовара
FROM Товары, Заказы
WHERE Заказы.КодСклада = Товары.КодСклада
GROUP BY
Товары.СтоимостьЗакупки,Товары.СтоимостьПродажи,Товары.НаличиеВПродаже,
Заказы.КодТовара
Данный запрос выбирает Коды товаров
с их стоимостями закупки, продажи и наличием
в продаже. В полученном представлении мы можем
менять значения во всех столбцах, кроме последнего,
который является итогом работы функции агрегирования.

8.

Запись не может быть добавлена в представление, если столбцы, которые не входят в
представление, не принимают значение NULL или не имеют значения по умолчанию. Если
создать представление с помощью выражения SELECT *, а затем поменять структуру
исходных таблиц, новые столбцы не появятся в представлении. То есть звездочка
интерпретируется как названия столбцов только во время создания представления.
Единственный выход – удалить представление и создать его заново.
Для представлений нет команд изменения структуры. Если вы вынуждены поменять
список полей и выражений, отображаемых с помощью представления, то удалите его и
создайте заново. Если представление ссылается на таблицы, которые были удалены, то при
запуске представления вы получите сообщение об ошибке.
Если исходные таблицы или представления были удалены, то настоятельный совет
разработчиков Microsoft SQL Server таков: вначале удалите представление, а затем создайте
его заново. Чтобы не путать представления с таблицами, рекомендуется давать им имена,
которые сразу отличали бы их от таблиц.

9.

Создадим представление, которое будет упрощать выборку такой информации, как
например поиск Сотрудников между определенными датами рождения в таблице
Сотрудники:
ALTER VIEW ВозрастСотрудников75_85
AS
SELECT Фамилия, Имя, Отчество, ДатаРождения, СрокРаботы
FROM Сотрудники
WHERE ДатаРождения BETWEEN '1975.12.10' AND '1985.01.1'
Проверим созданное представление:
SELECT * FROM ВозрастСотрудников

10.

С функциональной возможности использование представлений почти полностью аналогично
таблицам. К ним так же можно применять операторы INSERT, UPDATE и DELETE.
Однако при их использовании следует учитывать, что если в представлении используется
оператор JOIN, то обязательно использование ключевого слова INSTEAD OF, для указания вместо
каких столбцов следует вносить новые значения.
Для внесения изменений в существующие представления можно использовать:
◦ ALTER VIEW – для редактирования;
◦ CREATE VIEW – для создания новых представлений;
◦ DROP VIEW – для удаления представлений.

11.

Оператор ALTER VIEW. Изменение представлений.
Для изменения представлений используется оператор ALTER VIEW.
Изменим представление о Возрасте сотрудников на поиск между датами рождения
ALTER VIEW ВозрастСотрудников
AS
SELECT Фамилия, Имя, Отчество, ДатаРождения, СрокРаботы
FROM Сотрудники
WHERE ДатаРождения BETWEEN '1975.12.10' AND '1985.01.1'
SELECT * FROM ВозрастСотрудников

12.

Использование оператора UPDATE в представлении
Изменим контактный телефон клиента с фамилией «Курыгин»:
UPDATE ФИОклиенты
SET КонтактныйТелефон = '8 (918) 256-45-55'
WHERE Фамилия = 'Курыгин';
SELECT * FROM ФИОклиенты WHERE Фамилия = 'Курыгин';
SELECT * FROM Клиенты WHERE Фамилия = 'Курыгин';

13.

Удаление представлений. Использование оператора
DROP в представлении
DROP VIEW ФИОклиенты;
Представление ФИОклиенты удалено, но данные, добавленные в представление остаются в
таблице Клиенты
При повторном вызове оператора DROP на экран будет выведена ошибка
English     Русский Rules