В следующем наборе действий мы модифицируем представление dbo.Contact_in_495 для отображения информации обо всех покупателях с номером телефона, начинающегося с 495, сделавших заказ, с целью отображения даты заказа путем объединения таблиц dbo.Customers и dbo.Orders по общему столбцу CustID.
1. Откройте SQL Server management Studio и выполните подключение с использованием аутентификации Windows.
2. В Object Explorer расширьте папки сервера Databases=>Sales=>Views.
3. Щелкните правой кнопкой на представлении dbo.Contact_in_495 и выберите команду Modify View для открытия редактора View Assisted Editor.
4. Модифицируйте код в блоке синтаксиса T-SQL (рис. 4):
SELECT TOP 100 PERCENT Lname as [Фамилия], Fname as [Имя], Phone as [Номер телефона], o.OrdDate as [Дата]
FROM dbo.Customers с JOIN dbo.Orders o ON c.CustID = o.CustID
WHERE Phone LIKE ' 495%'
ORDER BY Lname
5. Щелкните на кнопке Save панели инструментов.
6. Чтобы протестировать представление, откройте новый запрос SQL Server и выполните следующий код:
USE Sales
SELECT * FROM dbo.Contact_in_495
Рис. 4. Объединение двух таблиц в представлении
Если вы сравните инструкцию SELECT из п. 4 с инструкцией SELECT из п. 6, то поймете, почему лучше использовать представление вместо нерегламентированного запроса. Если вы запишете инструкцию SELECT из п. 4 в интерфейсный код (который будет храниться на пользовательских машинах), то каждый раз при выполнении запроса все строки кода будут пересылаться на сервер через сеть. Поскольку вы преобразовали этот запрос в представление, то по сети будут пересылаться только две строки кода из п. 6.
Объединение множества таблиц в представлении
Обычно данные, которые требуется извлечь из реляционной базы данных, такой как Sales, содержатся в разных таблицах. Пусть нам нужно выяснить, какие продукты заказывались в каждом контакте. Для этого нужно добавить в представление таблицу Products.
Таблица Products содержит информацию обо всех продуктах, используемых в заказах, включая их идентификаторы. Чтобы извлечь идентификатор продукта, входящего в заказ, сделанный клиентом с телефонным номером, начинающимся с 495, нужно объединить таблицы Orders и Customers по столбцу CustID, а затем объединить таблицы Orders и Products по столбцу ProdID:
SELECT TOP 100 PERCENT Lname as [Фамилия], Fname as [Имя], Phone as [Номер телефона], o.OrdDate as [Дата], p.Description as [Продукт]
FROM dbo. Orders o
JOIN dbo.Customers c ON o.CustID = c.CustID
JOIN dbo.Products p ON o.ProdID = p.ProdID
WHERE Phone LIKE ' 495%'
ORDER BY Lname
Для отображения данных о продуктах вы можете модифицировать представление Person.Contacts__in_495 следующим образом:
Рис. 5. Модифицируем код запроса
1. Откройте SQL Server Management Studio и выполните подключение с использованием аутентификации Windows.
2. В окне Object Explorer раскройте папки Databases=>Sales=>Views.
3. Щелкните правой кнопкой мыши на представлении dbo. Contacts_in_495 и с помощью команды Modify View, откройте редактор View Assisted Editor.
4. Модифицируйте свой код следующим образом (рис. 5):
SELECT TOP 100 PERCENT Lname as [Фамилия], Fname as [Имя], Phone as [Номер телефона], o.OrdDate as [Дата], p.Description as [Продукт]
FROM dbo. Orders o
JOIN dbo.Customers c ON o.CustID = c.CustID
JOIN dbo.Products p ON o.ProdID = p.ProdID
WHERE Phone LIKE ' 495%'
ORDER BY Lname
5. На панели инструментов щелкните на кнопке Save.
6. Чтобы протестировать представление, откройте новый запрос SQL Server и выполните следующий код (рис. 6):
USE Sales
SELECT * FROM dbo.Contact_in_495
Как видите, представления очень удобно использовать для повышения производительности и экономии сетевого трафика. Их также можно использовать для обеспечения защиты данных от непреднамеренного искажения при их модификации, разрешая доступ только к определённым полям.