Как создать представление в sql
Перейти к содержимому

Как создать представление в sql

  • автор:

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

Представления можно создавать в ядре СУБД SQL Server с помощью SQL Server Management Studio или Transact-SQL. Представление можно использовать в следующих целях.

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

ограничения

Представление может быть создано только в текущей базе данных.

Представление может включать не более 1 024 столбцов.

Разрешения

Для выполнения этой инструкции требуется разрешение CREATE VIEW в отношении базы данных и разрешение ALTER в отношении схемы, в которой создается представление.

Использование среды SQL Server Management Studio

  1. В обозревателе объектовразверните базу данных, в которой необходимо создать новое представление.
  2. Щелкните правой кнопкой мыши папку «Представления» , а затем выберите «Создать представление. «.
  3. В диалоговом окне Добавить таблицу выберите один или несколько элементов, которые необходимо включить в новое представление, на одной из следующих вкладок: «Таблицы», «Представления», «Функции» и «Синонимы».
  4. Нажмите кнопку «Добавить«, а затем нажмите кнопку «Закрыть«.
  5. На Панели диаграммвыберите столбцы или другие элементы для включения в новое представление.
  6. На Панели критериеввыберите дополнительные условия сортировки или фильтрации для столбцов.
  7. В меню «Файл» выберите «Сохранить имя представления».
  8. В диалоговом окне «Выбор имени» введите имя нового представления и нажмите кнопку «ОК«. Дополнительные сведения о конструкторе запросов и представлений см. в разделе «Инструменты конструктора запросов и представлений» (визуальные инструменты для баз данных).

Использование Transact-SQL

  1. В обозревателе объектов подключитесь к экземпляру ядра СУБД.
  2. На стандартной панели выберите пункт Создать запрос.
  3. Скопируйте приведенный ниже пример в окно запроса и нажмите кнопку Выполнить.
USE AdventureWorks2022; GO CREATE VIEW HumanResources.EmployeeHireDate AS SELECT p.FirstName, p.LastName, e.HireDate FROM HumanResources.Employee AS e INNER JOIN Person.Person AS p ON e.BusinessEntityID = p.BusinessEntityID; GO -- Query the view SELECT FirstName, LastName, HireDate FROM HumanResources.EmployeeHireDate ORDER BY LastName; GO 

Далее

Представления

В предыдущих статьях инструкции DDL и DML рассматривались применительно к базовым таблицам. Данные базовой таблицы хранятся на диске. В отличие от базовых таблиц, представления по умолчанию не существуют физически, т.е. их содержимое не сохраняется на диске. Это не относится к так называемым индексированным представлениям, которые рассматриваются позже. — это объекты базы данных, которые всегда создаются на основе одной или более базовых таблиц (или других представлений), используя информацию метаданных. Эта информация (включая имя представления и способ получения строк из базовых таблиц) — все, что сохраняется физически для представления. По этой причине представления также называются виртуальными таблицами.

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

Представление создается посредством инструкции CREATE VIEW, синтаксис которой выглядит следующим образом:

Инструкция CREATE VIEW должна быть единственной инструкцией пакета. (Это означает, что эту инструкцию следует отделять от других инструкций группы посредством инструкции GO.)

Параметр view_name задает имя определяемого представления, а в параметре column_list указывается список имен, которые будут использоваться в качестве имен столбцов представления. Если этот необязательный параметр опущен, то используются имена столбцов таблиц, по которым создается представление. Параметр select_statement задает инструкция SELECT, которая извлекает строки и столбцы из таблиц (или других представлений). Параметр WITH ENCRYPTION задает шифрование инструкции SELECT, повышая таким образом уровень безопасности системы баз данных.

Предложение SCHEMABINDING привязывает представление к схеме таблицы, по которой оно создается. Когда это предложение указывается, имена объектов баз данных в инструкции SELECT должны состоять из двух частей, т.е. в виде schema.db_object, где schema — владелец, а db_object может быть таблицей, представлением или определяемой пользователем функцией.

Любая попытка модифицировать структуру представлений или таблиц, на которые ссылается созданное таким образом представление, будет неудачной. Чтобы такие таблицы или представления можно было модифицировать (инструкцией ALTER) или удалять (инструкцией DROP), нужно удалить это представление или убрать из него предложение SCHEMABINDING.

Когда при создании представления указывается параметр VIEW_METADATA, все его столбцы можно обновлять (за исключением столбцов с типом данных timestamp), если представление имеет триггеры INSERT или UPDATE INSTEAD OF.

Инструкция SELECT в представлении не может содержать предложение ORDER BY или параметр INTO. Кроме этого, по временным таблицам нельзя выполнять запросы.

Представления можно использовать для разных целей:

  • Для ограничения использования определенных столбцов и/или строк таблиц. Таким образом, представления можно использовать для управления доступом к определенной части одной или нескольких таблиц.
  • Для скрытия подробностей сложных запросов. Если для приложения базы данных требуются запросы со сложными операциями соединения, создание соответствующих представлений может упростить такие запросы.
  • Для ограничения вставляемых или обновляемых значений некоторым диапазоном.

В примере ниже показано создание представления:

USE SampleDb; GO CREATE VIEW view_Consultant AS SELECT EmpId, ProjectNumber, EnterDate FROM Works_on WHERE Job = 'Консультант';

Запрос в этом примере выбирает из таблицы Works_on строки, удовлетворяющие условию Job=’Консультант’. Представление view_Consultant определяется строками и столбцами, возвращаемыми этим запросом. На рисунке ниже отображена таблица Works_on, в которой строки, выбранные в представлении view_Consultant, выделены красным цветом:

Выбираемые строки из таблицы с помощью представления

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

USE SampleDb; GO CREATE VIEW view_WithoutBudget AS SELECT Number, ProjectName FROM Project;

Запрос в этом примере выбирает для включения в представление view_WithoutBudget все столбцы таблицы Project, за исключением столбца Budget.

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

  • если столбец представления создается из выражения или агрегатной функции;
  • если два или больше столбцов представления имеют одинаковое имя в базовой таблице.

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

USE SampleDb; GO CREATE VIEW view_Count(projectNumber, countProject) AS SELECT ProjectNumber, COUNT(*) FROM Works_on GROUP BY ProjectNumber;

Здесь имена столбцов представления view_Count должны быть указаны явно по той причине, что инструкция SELECT содержит агрегатную функцию count(*), которая требует, чтобы все столбцы представления были именованы.

Не требуется явно указывать список столбцов в инструкции CREATE VIEW, если применить заголовки столбцов, как это показано в примере ниже:

USE SampleDb; GO CREATE VIEW view_Count1 AS SELECT ProjectNumber, COUNT(*) countProject FROM Works_on GROUP BY ProjectNumber;

Представление можно создать из другого представления, как показано в примере:

USE SampleDb; GO CREATE VIEW view_project_p2 AS SELECT EmpId FROM view_Consultant WHERE ProjectNumber ='p2';

Представление view_project_p2 в примере ниже создается из представления view_Consultant. Все запросы, использующие представление view_project_p2, преобразовываются в эквивалентные запросы к базовой таблице Works_on.

Представления можно также создавать посредством среды Management Studio. Для этого выберите в обозревателе объектов базу данных, в которой требуется создать представление, щелкните в ней правой кнопкой мыши узел Views и в открывшемся контекстном меню выберите пункт New View. Откроется редактор представлений, в котором можно выполнять следующие действия:

  • выбрать базовые таблицы и строки в этих таблицах для создания представления;
  • присвоить представлению имя и определить условия в предложении WHERE соответствующего запроса.

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

Для изменения определения представления в языке Transact-SQL применяется инструкция ALTER VIEW. Синтаксис этой инструкции аналогичен синтаксису инструкции CREATE VIEW, применяющейся для создания представления.

Использование инструкции ALTER VIEW позволяет избежать переназначения существующих разрешений для представления. Кроме этого, изменение представления посредством этой инструкции не влияет на объекты базы данных, зависящие от этого представления. Если же модифицировать представление, сначала удалив его (инструкция DROP VIEW), а затем создав новое представление с требуемыми свойствами (инструкция CREATE VIEW), то все объекты базы данных, которые ссылаются на это представление, не будут работать должным образом, по крайней мере, в период времени между удалением представления и его воссоздания.

Использование инструкции ALTER VIEW показано в примере ниже:

USE SampleDb; GO ALTER VIEW view_WithoutBudget AS SELECT Number, ProjectName FROM Project WHERE Number >= 'p3';

В этом примере инструкция ALTER VIEW расширяет инструкцию SELECT в представлении view_WithoutBudget новым условием в предложении WHERE.

Инструкция DROP VIEW удаляет из системных таблиц определение указанного в ней представления. Применение этой инструкции показано в примере ниже:

USE SampleDb; GO DROP VIEW view_Count;

При удалении представления инструкцией DROP VIEW все другие представления, основанные на удаленном, также удаляются, как показано в примере ниже:

USE SampleDb; GO DROP VIEW view_Consultant;

Здесь инструкция DROP VIEW явно удаляет представление view_Consultant, при этом неявно удаляя представление view_project_p2, основанное на представлении view_Consultant. Теперь попытка выполнить запрос по представлению view_project_p2 возвратит сообщение об ошибке.

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

Редактирование информации о представлениях

Наиболее важным представлением каталога применительно к представлениям является sys.objects. Как уже упоминалось, это представление каталога содержит информацию касательно всех объектов в текущей базе данных. Все строки этого представления со значением V в столбце type содержат информацию о представлениях.

А представление каталога sys.views содержит дополнительную информацию о существующих представлениях. Наиболее важным столбцом этого представления является столбец with_check_option, который информирует, указано или нет предложение WITH CHECK OPTION. Запрос для определенного представления можно отобразить посредством системной процедуры sp_helptext.

Представления и табличные объекты

Представления или Views представляют виртуальные таблицы. Но в отличии от обычных стандартных таблиц в базе данных представления содержат запросы, которые динамически извлекают используемые данные.

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

Для создания представления используется команда CREATE VIEW , которая имеет следующую форму:

CREATE VIEW название_представления [(столбец_1, столбец_2, . )] AS выражение_SELECT

Например, пусть у нас есть три связанных таблицы:

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 TABLE Customers ( Id INT IDENTITY PRIMARY KEY, FirstName NVARCHAR(30) NOT NULL ); CREATE TABLE Orders ( Id INT IDENTITY PRIMARY KEY, ProductId INT NOT NULL REFERENCES Products(Id) ON DELETE CASCADE, CustomerId INT NOT NULL REFERENCES Customers(Id) ON DELETE CASCADE, CreatedAt DATE NOT NULL, ProductCount INT DEFAULT 1, Price MONEY NOT NULL );

Теперь добавим в базу данных, в которой содержатся данные таблицы, следующее представление:

CREATE VIEW OrdersProductsCustomers AS SELECT Orders.CreatedAt AS OrderDate, Customers.FirstName AS Customer, Products.ProductName As Product FROM Orders INNER JOIN Products ON Orders.ProductId = Products.Id INNER JOIN Customers ON Orders.CustomerId = Customers.Id

То есть данное представление фактически будет возвращать сводные данные из трех таблиц. И после его создания мы сможем его увидеть в узле Views у выбранной базы данных в SQL Server Management Studio:

Views in SQL Server Management Studio

Теперь используем созданное выше представление для получения данных:

SELECT * FROM OrdersProductsCustomers

Представления Views в MS SQL Server

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

Представления могут иметь не более 1024 столбцов и могут обращаться не более чем к 256 таблицам.

Также можно создавать представления на основе других представлений. Такие представления еще называют вложенными (nested views). Однако уровень вложенности не может быть больще 32-х.

Команда SELECT , используемая в представлении, не может включать выражения INTO или ORDER BY (за исключением тех случаев, когда также применяется выражение TOP или OFFSET ). Если же необходима сортировка данных в представлении, то выражение ORDER BY применяется в команде SELECT, которая извлекает данные из представления.

Также при создании представления можно определить набор его столбцов:

CREATE VIEW OrdersProductsCustomers2 (OrderDate, Customer,Product) AS SELECT Orders.CreatedAt, Customers.FirstName, Products.ProductName FROM Orders INNER JOIN Products ON Orders.ProductId = Products.Id INNER JOIN Customers ON Orders.CustomerId = Customers.Id

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

Для изменения представления используется команда ALTER VIEW . Эта команда имеет практически тот же самый синтаксис, что и CREATE VIEW :

ALTER VIEW название_представления [(столбец_1, столбец_2, . )] AS выражение_SELECT

Например, изменим выше созданное представление OrdersProductsCustomers:

ALTER VIEW OrdersProductsCustomers AS SELECT Orders.CreatedAt AS OrderDate, Customers.FirstName AS Customer, Products.ProductName AS Product, Products.Manufacturer AS Manufacturer FROM Orders INNER JOIN Products ON Orders.ProductId = Products.Id INNER JOIN Customers ON Orders.CustomerId = Customers.Id

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

Для удаления представления вызывается команда DROP VIEW :

DROP VIEW OrdersProductsCustomers

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

Представления в SQL

Представления в SQL

Здравствуйте, в этой статье будут разобраны представления или view в SQL. На простых примерах объясним как создавать представления и как к ним обращаться. Также затронем понятие модифицируемого представления в SQL.

Общее понятие

Итак, представления в SQL являются особым объектом, который содержит данные, полученные запросом SELECT из обычных таблиц. Это виртуальная таблица, к которой можно обратиться как к обычным таблицам и получить хранимые данные. Представление в SQL может содержать в себе как данные из одной единственной таблицы, так и из нескольких таблиц. Представления нужны для того, чтобы упростить работу с базой данных и ускорить время ответа сервера. Так как представление — это уже результат некой выборки данных с помощью SELECT, то, очевидно, в следующий раз вместо запроса к нескольким таблицам достаточно просто обратиться к уже созданному представлению. Работу этого объекта характеризует следующее изображение:
На изображении — простой вариант использования представления, когда объединяются данные по идентификатору. Но, помимо этого, в представлениях могут быть разные виды условий и ограничений, также вложенные запросы и группировки по каким либо полям. Об этом будет сказано чуть позже.

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

Создание представления осуществляется следующей командой:

CREATE VIEW name_view as 

Где name_view — имя, которое задает пользователь при создании. После ключевого слова as идет код запроса SELECT, данные которого и поместятся в представление. Чтобы легче понять разберем простой пример, иллюстрация которого была представлена выше.

CREATE VIEW info_order AS SELECT onum, amt, cname FROM orders, customers WHERE orders.cnum = customers.cnum

С помощью SELECT выбираются данные и помещаются в представление. Еще раз повторим, что когда данные в исходных таблицах изменятся, то они поменяются и в представлении. Теперь представление практически является таблицей, если вы используете phpmyadmin, то слева в меню можно увидеть такую картину:

Обращение к представлениям в SQL

Чтобы посмотреть данные из представления следует воспользоваться теми командами, которые были изучены в предыдущих уроках — например по оператору SELECT в SQL.

SELECT * FROM info_order

Помимо простого SELECT, в SQL к представлениям можно обращаться с различными условиями WHERE, как к обычным таблицам. Также можно использовать данные из этого представления, чтобы сформировать новое представление — хотя это и редко используется, тем не менее, в SQL есть такая возможность.

Примеры представлений

Рассмотрим такую задачу:

Создайте представление Cust_Rating_Max, которое бы показывало всех покупателей и их город, которые имеют самые высокие рейтинги.

Хорошей практикой является решение задачи запроса SELECT, а затем уже создание самого представления. То есть сначала лучше написать запрос, который вернет на экран то, что нужно. Затем создать представление. Вот итоговый код решения этой задачи:

CREATE VIEW Cust_Rating_Max as SELECT cname, city, rating FROM customers WHERE rating = (SELECT Max(rating) FROM customers)

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

Создайте представление Sale_Amt_Avg, которое бы показывало усредненные суммы заказов для каждого продавца после его имени.

Нужно сделать группировку по имени продавца и следующий код нам в этом поможет:

CREATE VIEW Sale_Amt_Avg as SELECT sname, AVG(amt) FROM salespeople, orders WHERE salespeople.snum = orders.snum GROUP BY sname

По сути для каждого продавца рассчитывается среднее значение сумм его продаж и заносится в представление.

Это выделено в отдельный пункт, так как не все СУБД SQL поддерживают представления с сортировкой, но мы рассмотрим такую задачу:

Создайте представление Orders_All, которое бы показывало данные о заказах: сумму, дату, фамилию покупателя и продавца. Отсортировать по сумме заказа.

CREATE VIEW Orders_All as SELECT amt, odate, customers.cname, salespeople.sname FROM orders, customers, salespeople WHERE orders.cnum = customers.cnum and orders.snum = salespeople.snum ORDER BY amt

В этом запросе по сути создается представление, которое дублирует таблицу orders, и заменяет в ней идентификаторы на фамилии. Также происходит сортировка по сумме заказа.

На этом с практикой мы закончим и еще немного поговорим о теории представлений.

Понятие модифицируемого представления в SQL

Итак, в SQL есть такое понятие как модифицируемого представление — это означает, что при изменении данных в самом представлении, эти данные изменятся и в таблицах, которые эти данные хранят. То есть при использовании оператора UPDATE/INSERT/DELETE к представлению, данные обновятся и в таблицах.

Очевидно, что не все представления являются такими и на самом деле большая часть является немодифицируемыми. По причине неоднозначности: например в представлении хранятся данные из двух таблиц. Пользователь удаляет одну строку в представлении, и тут возникает вопрос — удалять ли исходные данные в таблицах, а если и удалять, то сразу из двух или только одной… В этом и состоит неоднозначность.

Поэтому выделили специальные критерии по которым можно определенно сказать — является ли представление SQL модифицируемым. Эти критерии вы можете найти по этой ссылке — тут статья на очень полезном ресурсе по SQL языку.

Заключение

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

Поделиться ссылкой:

Добавить комментарий

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