Представления и табличные объекты
Представления или Views представляют виртуальные таблицы. Но в отличии от обычных стандартных таблиц в базе данных представления содержат запросы, которые динамически извлекают используемые данные.
Представления дают нам ряд преимуществ. Они упрощают комплексные SQL-операции. Они защищают данные, так как представления могут дать доступ к части таблицы, а не ко всей таблице. Представления также позволяют возвращать отформатированные значения из таблиц в нужной и удобной форме.
Для создания представления используется команда CREATE VIEW , которая имеет следующую форму:
- CREATE VIEW название_представления [(столбец_1, столбец_2, ....)]
- AS выражение_SELECT
Например, пусть есть три связанных таблицы:
Теперь добавим в базу данных, в которой содержатся данные таблицы, следующее представление
То есть данное представление фактически будет возвращать сводные данные из трех таблиц. И после его создания мы сможем его увидеть в узле Views у выбранной базы данных в SQL Server Management Studio:
При создании представлений представления, как и таблицы, должны иметь уникальные имена в рамках той же базы данных.
Представления могут иметь не более 1024 столбцов и могут обращаться не более чем к 256 таблицам.
Также можно создавать представления на основе других представлений. Такие представления еще называют вложенными ( nested views ). Однако уровень вложенности не может быть больще 32-х.
Команда SELECT , используемая в представлении, не может включать выражения INTO или ORDER BY (за исключением тех случаев, когда также применяется выражение TOP или OFFSET ). Если же необходима сортировка данных в представлении, то выражение ORDER BY применяется в команде SELECT , которая извлекает данные из представления.
Также при создании представления можно определить набор его столбцов:
Изменение представления
Для изменения представления используется команда ALTER VIEW . Эта команда имеет практически тот же самый синтаксис, что и CREATE VIEW :
- ALTER VIEW название_представления [(столбец_1, столбец_2, ....)]
2. AS выражение_SELECT
Например, изменим выше созданное представление OrdersProductsCustomers:
Удаление представления
Для удаления представления вызывается команда DROP VIEW :
DROP VIEW OrdersProductsCustomers
При удалении таблиц также следует удалить и
представления, которые используют эти таблицы .
Обновляемое представление
Представления могут быть обновляемыми. В таких
представлениях можно изменить или удалить строки или
добавить в них новые строки.
При создании подобных представлений есть ограничения.
В частности, команда SELECT при создании обновляемого
представления не может содержать:
- TOP
- DISTINCT
- UNION
- JOIN
- агрегатные функции типа COUNT или MAX
- GROUP BY и HAVING
- подзапросы
- производные столбцы или столбцы, которые вычисляются на основании нескольких значений
- обращения одновременно к нескольким таблицам
Это касается именно обновляемого представления. Например, для создания обычного представления мы можем использовать в команде SELECT оператор JOIN, однако такое представление не будет обновляемым.
Пусть дана таблица:
- CREATE TABLE Products
- (
- Id INT IDENTITY PRIMARY KEY,
- ProductName NVARCHAR(30) NOT NULL,
- Manufacturer NVARCHAR(20) NOT NULL,
- ProductCount INT DEFAULT 0,
- Price MONEY NOT NULL
- )
Создадим обновляемое представление:
- CREATE VIEW ProductView
- AS SELECT ProductName AS Product, Manufacturer, Price
- FROM Products
При добавлении фактически будет добавлен объект в таблицу Products, которую использует представление ProductView. И поэтому надо учитывать, что если в этой таблице есть какие-либо столбцы, в которые представление не добавляет данные, но которые не допускают значение NULL или не поддерживают значение по умолчанию, то добавление завершится с ошибкой.
Обновление строки представления:
- UPDATE ProductView
- SET Price= 15000 WHERE Product='Nokia 8‘
Удаление строки в представлении:
DELETE FROM ProductView WHERE Product='Nokia 8‘
Обновление и удаление также затрагивают ту таблицу,
которую использует представление.

Представления в Microsoft SQL Server (194.5 KB)

