Self-Learning – видеокурсы и книги по IT

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

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

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

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

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

Интересное на тему языка T-SQL

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

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

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

Как Вы понимаете, представления мы можем использовать не только для упрощения и сокращения кода 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 инструкция, рекомендую пройти онлайн-курс «T-SQL. Путь программиста от новичка к профессионалу. Уровень 1 – Новичок», который предназначен для начинающих и на нем подробно рассмотрены все базовые конструкции языка 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.

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

Если Вам представление больше не требуется, т.е. Вы им больше не будете пользоваться, и оно не используется в других представлениях, функциях или процедурах, иными словами, на него никто не ссылается, то Вы его можете удалить, это делается с помощью инструкции 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

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


SELECT * FROM GoodsUpdate;

GO

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

GO

SELECT * FROM GoodsUpdate;

Скриншот 6

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

Совет эксперта
Виталий Трунин
Основатель проекта Self-Learning.ru. Программист T-SQL.
Задать вопрос
Для комплексного изучения языка T-SQL, рекомендую пройти онлайн-курсы по T-SQL, на которых используется последовательная методика обучения и рассматриваются все конструкции языка T-SQL.

Как создать представление (VIEW) в Microsoft SQL Server на SQL

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

Теги: # #
Понравилась статья? Поделитесь с друзьями:
Share on VK
VK
Share on Facebook
Facebook
Tweet about this on Twitter
Twitter
Share on Tumblr
Tumblr
Share on Reddit
Reddit
Email this to someone
email

Авторские онлайн-курсы по T-SQL

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Пролистать наверх