Студопедия КАТЕГОРИИ: АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Часть 2. Использование представленийСтр 1 из 2Следующая ⇒
Представления (View) Часть 1. Понятие представления View –это объект базы данных, представляющий собой виртуальную таблицу, информация в которой формируется динамически в соответствии с запросом, хранящимся в БД и ассоциированным с этим представлением. По сути это не что иное, как хранимый запрос, содержание которого формируется динамически по итогам обращения к одной или нескольким таблицам, как только в кодах встречается обращение к представлению. При этом у пользователя создается впечатление, что он работает с реально существующей таблицей. Однако такой объект не требует для своего хранения дисковой памяти кроме памяти, необходимой для его определения.
Представление создается следующей командой:
<определение_просмотра> : : = { CREATE | ALTER} VIEW имя_представления [(имя_столбца [,...n]}] [WITH ENCRYPTION [, SHENABINDING] [, VIEW METADATA]] AS SELECT_onepaтор [WITH CHECK OPTION] [;]
Самая простая синтаксическая структура создания представления: CREATE VIEW имя_представления AS SELECT_onepaтор;
Как и во всех случаях использования оператора CREATE, после выполнения этой команды никаких результатов работы оператораSELECT на экране мы не увидим. Будет лишь выдана диагностика об успешном завершении процесса создания представления. Зачем создаются представления? Во-первых, это связано с необходимостью сокрытия конфиденциальных данных, хранящихся в отдельных полях таблиц. После создания представлений доступ к данным для всех пользователей открывается только через представления, прямого доступа к таблицам нет. Таким образом, частично решается проблема безопасности данных. Во-вторых, это связано с необходимостью предоставлять пользователям выборки данных по определенным условиям из различных таблиц. В-третьих, пользователям не придется писать довольно сложные запросы, использующие соединения таблиц, операции агрегирования и т.д.
Назначение основных параметров: По умолчанию имена столбцов в представлении соответствуют именам столбцов в исходных таблицах. Явное указание имени столбца требуется для вычисляемых столбцов или при объединении нескольких таблиц, имеющих столбцы с одинаковыми именами. Имена столбцов перечисляются через запятую, в соответствии с порядком их следования в представлении. Параметр WITH ENCRYPTION предписывает серверу шифровать SQL-код запроса, что гарантирует невозможность его несанкционированного просмотра и использования. Если при определении представления необходимо скрыть имена исходных таблиц и столбцов, а также алгоритм объединения данных, необходимо применить этот аргумент. Параметр WITH CHECK OPTION предписывает серверу исполнять проверку изменений, производимых (интерактивно пользователем или клиентским приложением) через представление, на соответствие критериям, определенным в операторе SELECT. Использование аргумента WITH CHECK OPTION гарантирует, что сделанные изменения будут отображены в представлении.
Это означает, что не допускается выполнение изменений, которые приведут к исчезновению строки из представления. Такое случается, если в представлении установлен горизонтальный фильтр и изменение данных приводит к несоответствию строки установленным фильтрам. То есть, если пользователь пытается выполнить изменения, приводящие к исключению строки из представления, при заданном аргументе WITH CHECK OPTION сервер выдаст сообщение об ошибке и все изменения будут отклонены.
Примеры создания представлений Пример 1. Пусть впредставлении требуется показать клиентов из Москвы. В окне запросов наберем текст CREATE VIEWКлиенты_l AS SELECT Фамилия, Город FROM Клиенты WHERE Город = 'Москва'
Выполним набранный Выборка данных из представления: SELECT * FROM Клиенты_l
Обращение к представлению осуществляется с помощью оператора SELECT как к обычной таблице. То есть представление можно использовать в команде так же, как и любую другую таблицу. К представлению можно строить запрос, модифицировать представление и соединять его с другими таблицами базы данных.
Попытаемся выполнить команду: INSERT INTO Клиенты_1 VALUES ( 'Петров', 'Самара') Эта команда допустима, и строка будет добавлена в таблицу Клиенты с помощью представления Клиенты_1. Но эта добавленная строка не будет отображаться в представлении. Иногда такой подход может стать проблемой, т.к. данные уже находятся в таблице, но пользователь их не видит и не в состоянии выполнить их удаление или модификацию.
Для исключения подобных моментов служит WITH CHECK OPTION в определении представления. Пример 2.Модифицируем созданное представление ALTER VIEW Клиенты_1 SELECT Фамилия, Город FROM Клиенты WHERE Город = 'Москва' WITH CHECK OPTION Теперь вставляемые данные (или при попытке модификации данных через такое представление) будут проверяться на соответствие критериям, определенным в конструкции WHERE, определенной в оператореSELECT. И приведенный выше оператор вставки будет отбрасываться. Но, если вы вставите эти данные эти же данные в базовую таблицу, то все пройдет успешно. Пример 3. Требуется создать представление, показывающее виды и количество проданного товара. Создадим это представление с помощью программы Management Studio. · Откройте SQL Server Management Studio; · В базе данных «Торговая_фирма» выделите объект Представления; Создать представление; · В открывшемся окне редактора представлений сформулируйте запрос
SELECT Товары.Название_товара, Продажи.Количество_ед_товара FROM Товары INNER JOINПродажи ONТовары.ID_товара = Продажи.Товар · Выполните сформированный запрос; · Сохраните представление под именем Товары_количество_1; · Откройте созданную таблицу-представление.
Рис. 1. Создание представления с помощьюSQL ServerManagement studio
Пример 5. С помощью запросатребуется создать представление, аналогичное описанному в примере 4. · Нажмите Создать запрос; · Наберите следующий код: USEТорговая_фирма GO CREATE VIEW Товары_Количество_2 AS SELECT dbo.Товары.Название_товара, dbo.Продажи.Количество_ед_товара FROM dbo.Товары INNER JOIN dbo.Продажи ON dbo.Товары.Id_товара = dbo.Продажи.Товар
Таким образом, были созданы разными способами два идентичных представления.
Пример 6. При создании представления можно задавать псевдонимы полей. Создайте следующее представление: USEТорговая_фирма GO CREATE VIEW Товары_Количество_3 (Товар, Продано) AS SELECT Товары.Название_товара, Продажи.Количество_ед_товара FROM Товары INNER JOIN Продажи ON Товары.Id_товара = Продажи.Товар
Выполните его командой SELECT * FROM Товары_Количество_3
Такое представление является простым способом организации общей таблицы для группы пользователей или прикладных задач, которые используют собственные имена полей и таблицы.
Пример 7. Требуется отредактировать имеющееся представление Товары_Количество_2, а именно, добавить в представление поле Датаиз таблицы Продажи. Это можно сделать двумя способами: Способ 1. С помощью Management studio. Для этого выделите представление Товары_Количество_2и выберите команду контекстного меню Изменить представление.
Способ 2. С помощью запроса.Для этого выделите представление Товары_Количество_2 и выберите команду Правка.
Во втором случае вы получите коды: SET QUOTED_IDENTIFIER ON - - Включен контроль приращения размеров файла данных GO SET ANSI_NULLS OFF - - Включен контроль NULL-значений GO
ALTER Товары_Количество_2 AS SELECT Товары.Название_товара, Продажи.Количество_ед_товара, Продажи.Дата FROM Товары INNER JOINПродажи ON Товары.Id_товара = Продажи.Товар
GO SET QUOTED_IDENTIFIER OFF - -Выключен контроль приращения размеров файла данных GO SET ANSI_NULLS ON - -Выключен контроль NULL-значений GO
Пример 8. Теперь с помощью представления добавим новые данные в одну из таблиц базы данных. Выполним команду INSERT INTO Товары_Количество_2 VALUES(‘Ряженка’, 12, ‘12/09/10’)
Эта команда допустима, и строка будет добавлена в таблицу Товары (если в остальных полях таблиц допустимы значения NULL).
Часть 2. Использование представлений Задание 9. С помощью представления Товары_Количество_2требуется выбрать товары, которые были проданы в период с 1.01.2008 по 1.06.2008. Это опять можно сделать двумя способами:
Способ 1. С помощью Management studio. Для этого выделите представление Товары_Количество_2и выберите командуПроект. Далее в окне редактора запросов создайте запрос к представлению, ориентируясь на рисунок 2. Рис. 2. Редактор запросов в Management studio
Способ 2. С помощью Редактора запросов. Введите коды, аналогичные тем, которые были сгенерированы в предыдущем способе: SET QUOTED_IDENTIFIER ON - - Включен контроль приращения размеров файла данных GO SET ANSI_NULLS ON - - Включен контроль NULL-значений GO
ALTER Товары_Количество_2 AS
SELECT dbo.Товары.Название_товара, dbo.Продажи.Количество_ед_товара, dbo.Продажи.Дата FROM dbo.Товары INNER JOIN dbo.Продажи ON dbo.Товары.ID_товара = dbo.Продажи.Товар WHERE (CAST(Продажи.Дата AS DATE) BETWEEN '01.01.2010' AND '20.02.2010')
Задание 10. С помощью представления Товары_Количество_2требуется получить данные о проданных товарах за вчерашний день. Пояснение. Возможно, даты, которые хранятся в базе данных Торговая_фирма, относятся к давно прошедшему времени. Перед выполнением задания пополните таблицу записями о продажах за вчерашний день.
Чтобы пополнить базу данных сведениями о вчерашних продажах, можно выполнить следующие коды: USE Торговая_фирма GO INSERT INTO Продажи (Дата,Товар, Клиент, Количество_ед_товара) VALUES ((DATEADD(day, -1, GETDATE()), 2, 2, 10)
Функция DATEADDпозволяет складывать и вычитать значения продолжительности любых промежутков времени (дни, недели и т. д.). |
|||||
Последнее изменение этой страницы: 2018-04-12; просмотров: 671. stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда... |