Представление (VIEW) в T-SQL – описание и примеры использования

Приветствую всех посетителей сайта Info-Comp.ru! Сегодня мы с Вами поговорим о таких объектах Microsoft SQL Server, как «Представления», Вы узнаете, что это за объекты, для чего они нужны, а также как создавать, изменять и удалять представления на языке T-SQL.

Представление (VIEW) в T-SQL

Заметка! Что такое T-SQL. Подробное описание для начинающих.

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

Представление (VIEW) – это объект базы данных Microsoft SQL Server, который хранит в себе запрос SELECT и в случае обращения к данному объекту будет возвращен результирующий набор данных, который формирует запрос, указанный в определении представления.

Иными словами, это виртуальная (логическая) таблица, она не содержит в себе данных, но к ней можно обращаться как к обычной таблице, и она будет возвращать Вам данные. Обычно такой объект называют «Вьюха».

Для чего нужны представления

Если достаточно часто в своих SQL запросах Вы используете однотипные вложенные запросы, которые возвращают табличные данные, т.е. являются производными таблицами, то для удобства и сокращения кода Вы можете сохранить такие вложенные запросы в виде представления. И затем, где Вам требуется использовать именно тот набор данных, который Вы указали в запросе, Вы будете указывать название представления, точно так же как мы указываем название таблиц, согласитесь — это очень удобно!

Таким образом, представления нужны для:

  • Упрощения и сокращения кода запроса;
  • Повышения читабельности кода запроса;
  • Сокрытия сложности реализации задачи от пользователя;
  • Обеспечения эффективных путей доступа к данным;
  • Обеспечения корректности производных данных;
  • Более легкого управления. Чтобы внести изменения в алгоритм, формирующий данные, которые возвращает представление, не требуется изменять код везде, где используется этот алгоритм, достаточно изменить код в одном определении представления.

Как Вы понимаете, представления мы можем использовать не только для упрощения и сокращения кода SQL запроса, а еще для повышения безопасности, сокрытия сложности реализации алгоритмов и для обеспечения корректности производных данных.

Заметка! Для чего нужны хранимые процедуры в языке T-SQL.

Какие бывают представления

Представления бывают:

  • Пользовательские – это те, которые мы сами создаем;
  • Системные – это представления, которые уже есть в SQL сервере. Они возвращают нам системную информацию.

Работа с представлениями на T-SQL

Исходные данные

Сначала нам необходимо создать тестовые данные для наших примеров.

Допустим, у нас будет таблица Goods, которая хранит некую информацию о товарах, и таблица Categories, которая хранит данные о категориях товара.

   
   --Создание таблицы
   CREATE TABLE Goods (
	ProductId INT IDENTITY(1,1) NOT NULL,
	Category INT NOT NULL,
	ProductName VARCHAR(100) NOT NULL,
	Price MONEY NULL,
   );

   --Добавление данных в таблицу
   INSERT INTO Goods(Category, ProductName, Price)
	VALUES (1, 'Клавиатура', 30),
	       (1, 'Монитор', 100),
	       (2, 'Смартфон', 200);

   --Создание таблицы с категориями
   CREATE TABLE Categories (
	CategoryId INT IDENTITY(1,1) NOT NULL,
	CategoryName VARCHAR(100) NOT NULL
   );

   --Добавление данных в таблицу с категориями
   INSERT INTO Categories
	VALUES ('Комплектующие компьютера'),
	       ('Мобильные устройства');

   SELECT * FROM Goods;
   SELECT * FROM Categories;

Скриншот 1

Заметка! Всем тем, кто только начинает свое знакомство с языком SQL, рекомендую прочитать книгу «SQL код» – это самоучитель по языку SQL для начинающих программистов. В ней очень подробно рассмотрены основные конструкции языка.

Создание представлений

Представим, что нам постоянно требуется знать, сколько товаров в той или иной категории, но писать каждый раз SQL запрос на получение таких данных нам не хочется и это не очень удобно. Поэтому мы приняли решения сохранить запрос на получение таких данных в виде представления и, когда нам потребуется узнать количество товаров в категории, мы просто будем обращаться к этому представлению.

Создается представление с помощью инструкции CREATE VIEW.

Для решения нашей задачи мы можем создать следующее представление.

   
   CREATE VIEW CountProducts
   AS
	SELECT C.CategoryName AS CategoryName,  
		   COUNT(*) AS CntProducts
	FROM Goods G
	INNER JOIN Categories C ON Category = C.CategoryId
	GROUP BY C.CategoryName;

Скриншот 2

После инструкции CREATE VIEW мы указали название представления, затем мы указали ключевое слово AS и только после этого мы написали запрос, результирующий набор которого и будет содержать наше представление.

Примечание! В представлении нельзя использовать секцию ORDER BY, т.е. сортировку, в случае необходимости, отсортировать данные Вы можете, когда будете обращаться к этому представлению. Использование ORDER BY возможно, только если указан оператор TOP.

Теперь, для того чтобы получить данные о количестве товаров в категории, мы можем обратиться к этому представлению, например, как к обычной таблице.

   
   SELECT * FROM CountProducts;

Скриншот 3

Изменение представлений

А сейчас давайте допустим, что нам нужно, чтобы это представление возвращало еще и идентификатор категории, если Вы обратили внимание, то в предыдущем примере таких данных нет. Для этого используем инструкцию ALTER VIEW, которая подразумевает изменение представления.

   
   ALTER VIEW CountProducts
   AS
	SELECT C.CategoryId,
		   C.CategoryName AS CategoryName,  
		   COUNT(*) AS CntProducts
	FROM Goods G
	INNER JOIN Categories C ON Category = C.CategoryId
	GROUP BY C.CategoryId, C.CategoryName;

   GO

   SELECT * FROM CountProducts;

Скриншот 4

В данном случае мы написали инструкцию ALTER VIEW, которая говорит SQL серверу, что мы хотим изменить существующий объект, затем указали название представления, чтобы сервер мог определить, какое именно представление мы хотим изменить, после ключевого слова AS мы указали новое определение представления, т.е. измененный запрос SELECT.

Чтобы отделить инструкцию изменения представления от SQL запроса на выборку, мы написали команду GO.

Заметка! Транзакции в T-SQL – основы для новичков с примерами.

Удаление представлений

Если Вам представление больше не требуется, т.е. Вы им больше не будете пользоваться, и оно не используется в других представлениях, функциях или процедурах, иными словами, на него никто не ссылается, то Вы его можете удалить, это делается с помощью инструкции DROP VIEW.

   
   DROP VIEW CountProducts;

Скриншот 5

Теперь данного представления больше нет, и к нему Вы больше обратиться не сможете.

Обновляемые представления в Microsoft SQL Server

Кроме того, что к представлению можно обращаться и извлекать данные, представление позволяет еще и изменять данные базовой таблицы, такие представления называются «Обновляемые представления». Однако для этого необходимо выполнение следующих условий:

  • Любое изменение (UPDATE, INSERT или DELETE) должно касаться столбцов только одной базовой таблицы;
  • Столбцы, данные которых Вы хотите изменить, должны напрямую ссылаться на столбцы базовой таблицы, иными словами, нельзя внести изменения в столбцы, которые были сформированы в представлении, например, агрегатной функцией или другими вычислениями.

Допустим, у нас есть представление, которое возвращает список товаров. Для примера мы его назвали GoodsUpdate.

   
   CREATE VIEW GoodsUpdate
   AS
	SELECT ProductId, Category, ProductName, Price
	FROM Goods;

   GO

Заметка! Чем отличаются функции от хранимых процедур в T-SQL.

И в данном случае мы можем изменить данные, хранящиеся в таблице Goods, через представление, не обращаясь к этой таблице напрямую.

   
   SELECT * FROM GoodsUpdate;

   GO

   UPDATE GoodsUpdate SET Price = Price + 10
   WHERE Category = 2;

   GO

   SELECT * FROM GoodsUpdate;

Скриншот 6

Мы видим, что данные успешно изменены.

Заметка! Для комплексного изучения языка SQL и T-SQL рекомендую пройти онлайн-курсы по T-SQL, на которых используется последовательная методика обучения и рассматриваются все объекты SQL Server и конструкции языка T-SQL.

На сегодня это все, надеюсь, материал был Вам интересен и полезен, до новых встреч!

Понравилась статья? Поделиться с друзьями:
Заметки IT специалиста
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:
Нажимая на кнопку «Отправить комментарий», я даю согласие на обработку персональных данных и принимаю политику конфиденциальности.