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

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

  • автор:

�� Как запустить представление в SQL: подробное руководство для начинающих

Чтобы запустить представление в SQL, вы можете использовать оператор SELECT с именем представления и указать столбцы, которые вы хотите выбрать. Например, если у вас есть представление с именем «my_view» и вы хотите выбрать все столбцы, вы можете написать следующий запрос:

 SELECT * FROM my_view; 

Этот запрос выберет все столбцы из представления «my_view». Вы также можете указать конкретные столбцы, которые вам нужны, перечислив их через запятую:

 SELECT column1, column2 FROM my_view; 

Здесь «column1» и «column2» — это имена столбцов, которые вы хотите выбрать из представления. Надеюсь, это поможет вам запустить ваше представление в SQL!

Детальный ответ

Как запустить представление в SQL

В SQL представление — это виртуальная таблица, которая может быть использована для выполнения запросов. Оно является результатом выполнения SELECT-запроса и содержит результирующий набор данных. Для запуска представления в SQL можно использовать простой SELECT-запрос. Давайте рассмотрим пример:

 SELECT * FROM название_представления; 

Вместо «название_представления» необходимо указать имя вашего представления. Запрос вернет все строки и столбцы из представления. Также вы можете использовать представление в составных запросах, объединяя его с другими таблицами или представлениями. Например:

 SELECT * FROM название_таблицы INNER JOIN название_представления ON условие_соединения; 

В этом примере мы объединяем таблицу с представлением с помощью оператора INNER JOIN и указываем условие соединения. Результатом будет объединенный набор данных. Если вы хотите обновить данные в представлении, вы можете использовать оператор UPDATE:

 UPDATE название_представления SET столбец = новое_значение WHERE условие; 

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

 DELETE FROM название_представления WHERE условие; 

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

Как запустить представление SQL: руководство для начинающих

После выполнения запроса вы увидите результаты из представления.

Детальный ответ

Как запустить представление SQL?

Представления (Views) в SQL позволяют создавать виртуальные таблицы, которые являются результатом выполнения запроса к одной или нескольким таблицам в базе данных. Они предоставляют удобный способ для организации и представления данных в более простом и понятном виде. В этой статье мы рассмотрим, как запустить представление SQL.

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

Прежде чем запускать представление, необходимо создать его. Для этого используется оператор CREATE VIEW, который позволяет указать имя представления и определить его структуру и данные. Ниже приведен пример создания представления, которое выбирает все столбцы из таблицы «employees»:

 CREATE VIEW employee_view AS SELECT * FROM employees; 

В этом примере представление с именем «employee_view» будет создано и будет содержать все столбцы из таблицы «employees».

2. Запуск представления SQL

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

Вот пример простого запроса SELECT, который выбирает все данные из представления «employee_view»:

 SELECT * FROM employee_view; 

Этот запрос вернет все записи из представления «employee_view». Вы можете использовать представление в любом месте, где обычно используются таблицы.

3. Обновление данных в представлении SQL

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

Вот пример использования представления для обновления данных. Предположим, у нас есть представление «employee_view» и мы хотим поменять имя сотрудника с идентификатором 1:

 UPDATE employee_view SET name = 'Новое имя' WHERE employee_id = 1; 

Этот запрос обновит имя сотрудника с идентификатором 1 в представлении «employee_view».

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

Если вам больше не нужно представление, вы можете его удалить с помощью оператора DROP VIEW. Вот пример:

 DROP VIEW employee_view; 

Этот запрос удалит представление «employee_view» из базы данных.

Вывод

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

CREATE VIEW (Transact-SQL)

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

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

Синтаксис

-- Syntax for SQL Server and Azure SQL Database CREATE [ OR ALTER ] VIEW [ schema_name . ] view_name [ (column [ . n ] ) ] [ WITH [ . n ] ] AS select_statement [ WITH CHECK OPTION ] [ ; ] ::=
-- Syntax for Azure Synapse Analytics and Parallel Data Warehouse CREATE VIEW [ schema_name . ] view_name [ ( column_name [ . n ] ) ] AS [;] ::= [ WITH [ . n ] ] SELECT
-- Syntax for [!INCLUDE [fabric](../../includes/fabric.md)] CREATE [ OR ALTER ] VIEW [ schema_name . ] view_name [ ( column_name [ . n ] ) ] AS [;] ::= [ WITH [ . n ] ] SELECT

Сведения о синтаксисе Transact-SQL для SQL Server 2014 (12.x) и более ранних версиях см . в документации по предыдущим версиям.

Аргументы

OR ALTER

Область применения: База данных SQL Azure и SQL Server (начиная с SQL Server 2016 (13.x) с пакетом обновления 1 (SP1).

Условно изменяет представление только в том случае, если оно уже существует.

schema_name
Имя схемы, которой принадлежит представление.

view_name
Имя представления. Имена представлений должны соответствовать требованиям, предъявляемым к идентификаторам. Указывать имя владельца представления не обязательно.

column
Имя, которое будет иметь столбец в представлении. Имя столбца требуется только в тех случаях, когда столбец формируется на основе арифметического выражения, функции или константы, если два или более столбцов могут по иной причине получить одинаковые имена (как правило, в результате соединения) или если столбцу представления назначается имя, отличное от имени столбца, от которого он произведен. Назначать столбцам имена можно также в инструкции SELECT.

Если аргумент column не указан, столбцам представления назначаются такие же имена, которые имеют столбцы в инструкции SELECT.

В столбцах представления разрешения для имени столбца применяются с инструкцией CREATE VIEW или ALTER VIEW вне зависимости от источника базовых данных. Например, если в инструкции CREATE VIEW были заданы разрешения для столбца SalesOrderID, инструкция ALTER VIEW может переименовать столбец SalesOrderID, например в OrderRef, и все же иметь разрешения, связанные с представлением, в котором используется столбец SalesOrderID.

AS

Определяет действия, которые должны быть выполнены в представлении.

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

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

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

Предложения SELECT, используемые в определении представления, не могут включать следующие элементы:

    предложение ORDER BY, если только в списке выбора инструкции SELECT нет также предложения TOP;

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

Так как аргумент select_statement использует инструкцию SELECT, допустимо включать в состав предложения FROM указания и . Дополнительные сведения см. в разделе FROM (Transact-SQL) и SELECT (Transact-SQL).

В аргументе select_statement можно использовать функции и множественные инструкции SELECT, разделенные оператором UNION или UNION ALL.

CHECK OPTION

Обеспечивает соответствие всех выполняемых для представления инструкций, изменяющих данные, критериям, заданным в выражении select_statement. Если строка изменяется посредством представления, предложение WITH CHECK OPTION гарантирует, что после фиксации изменений доступ к данным из представления сохранится.

CHECK OPTION применяется только к обновлениям, выполненным через представление. Он неприменим к обновлениям, выполненным непосредственно в базовых таблицах представления.

ШИФРОВАНИЕ

Область применения: SQL Server 2008 (10.0.x) и более поздних версий и База данных SQL Azure.

Выполняет шифрование элементов представления sys.syscomments, содержащих текст инструкции CREATE VIEW. Использование предложения WITH ENCRYPTION предотвращает публикацию представления в рамках репликации SQL Server.

SCHEMABINDING

Привязывает представление к схеме базовой таблицы или таблиц. Если аргумент SCHEMABINDING указан, нельзя изменить базовую таблицу или таблицы таким способом, который может повлиять на определение представления. Сначала нужно изменить или удалить само представление для сброса зависимостей от таблицы, которую требуется изменить. При использовании аргумента SCHEMABINDING инструкция select_statement должна включать двухкомпонентные (schema.object) имена таблиц, представлений или пользовательских функций, упоминаемых в предложении. Все указанные в инструкции объекты должны находиться в одной базе данных.

Представления или таблицы, входящие в представление, созданное при помощи предложения SCHEMABINDING, не могут быть сброшены, пока это представление не будет удалено или изменено таким образом, чтобы оно более не было привязано к схеме. В противном случае ядро СУБД вызывает ошибку. Кроме того, выполнение инструкций ALTER TABLE для таблиц, которые входят в представления, привязанные к схемам, завершается ошибкой, если эти инструкции влияют на определение представления.

В настоящее время представления в Azure Synapse Analytics не поддерживают привязку схем. Дополнительные сведения см. в статье Представления T-SQL с выделенным пулом SQL и бессерверным пулом SQL в Azure Synapse Analytics.

VIEW_METADATA

Указывает, что экземпляр SQL Server вернется в БИБЛИОТЕКу DB, ODBC и OLE DB API метаданных представления, а не базовую таблицу или таблицы, при запросе метаданных в режиме обзора для запроса, ссылающегося на представление. Метаданные в режиме обзора — это дополнительные метаданные, возвращаемые экземпляром SQL Server в эти клиентские API. Эти метаданные позволяют клиентским API-интерфейсам реализовывать обновляемые клиентские курсоры. Метаданные режима обзора содержат сведения о базовой таблице, которой принадлежат столбцы в результирующем наборе.

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

В представлении, созданном с предложением WITH VIEW_METADATA, все столбцы, за исключением столбца timestamp, поддерживают обновление, если представление включает триггеры INSTEAD OF INSERT или INSTEAD OF UPDATE. Дополнительные сведения об обновляемых представлениях см. в разделе «Примечания».

Замечания

Представление может быть создано только в текущей базе данных. Инструкция CREATE VIEW должна быть первой в пакетном запросе. Представление может включать не более 1 024 столбцов.

При запросе через представление ядро СУБД проверка, чтобы убедиться, что все объекты базы данных, на которые ссылается в любой точке инструкции, существуют, и что они допустимы в контексте инструкции, и что операторы изменения данных не нарушают правила целостности данных. Если проверка завершается ошибкой, возвращается сообщение об ошибке. При успешной проверке операция преобразуется в операцию над базовой таблицей или таблицами.

Если представление зависит от таблицы или представления, которое было удалено, ядро СУБД создает сообщение об ошибке, когда любой пользователь пытается использовать представление. Если создана новая таблица или представление, а структура таблицы не изменилась по сравнению с предыдущей базовой таблицей для замены удаленной, то представление можно использовать снова. Если структура новой таблицы или представления отличается от предыдущей, представление нужно удалить и создать заново.

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

При создании представления сведения о нем сохраняются в следующих представлениях каталога: sys.views, sys.columns и sys.sql_expression_dependencies. Текст инструкции CREATE VIEW сохраняется в представлении каталога sys.sql_modules.

Запрос, в котором используется индекс представления, определенного с выражением типа numeric или float, может привести к результатам, отличным от результатов подобного запроса, в котором не используется индекс представления. Это отличие может быть обусловлено ошибками округления при выполнении запросов INSERT, DELETE или UPDATE для базовых таблиц.

Ядро СУБД сохраняет параметры SET QUOTED_IDENTIFIER и SET ANSI_NULLS при создании представления. Эти исходные значения используются для синтаксического анализа данных представления при обращениях к нему. Таким образом, при доступе к представлению какие-либо заданные во время клиентского сеанса значения SET QUOTED_IDENTIFIER и SET ANSI_NULLS не влияют на определение представления.

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

В Azure Synapse Analytics в настоящее время обновляемые представления, триггеры DML (типа AFTER или INSTEAD OF) и секционированные представления не поддерживаются. Дополнительные сведения см. в статье Представления T-SQL с выделенным пулом SQL и бессерверным пулом SQL в Azure Synapse Analytics.

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

  • Любые изменения, в том числе инструкции UPDATE, INSERT и DELETE, должны ссылаться на столбцы только одной базовой таблицы.
  • Изменяемые в представлении столбцы должны непосредственно ссылаться на данные столбцов базовой таблицы. Столбцы нельзя сформировать каким-либо другим образом, в том числе:
    • агрегатными функциями: AVG, COUNT, SUM, MIN, MAX, GROUPING, STDEV, STDEVP, VAR и VARP.
    • на основе вычисления. Столбец нельзя вычислить по выражению, включающему другие столбцы. Столбцы, сформированные при помощи операторов UNION, UNION ALL, CROSSJOIN, EXCEPT и INTERSECT, считаются вычисляемыми и также не являются обновляемыми.

    Вышеназванные ограничения относятся ко всем подзапросам представления в предложении FROM, равно как и к самому представлению. Как правило, ядро СУБД должны иметь возможность однозначно отслеживать изменения из определения представления в одну базовую таблицу. Дополнительные сведения см. в разделе Изменение данных через представление.

    Если вышеуказанные ограничения не позволяют изменить данные через представление напрямую, рассмотрите следующие варианты.

    • Триггеры INSTEAD OF Чтобы сделать представление обновляемым, для него можно создать триггеры INSTEAD OF. Триггер INSTEAD OF выполняется вместо инструкции модификации данных, для которой он определен. Этот триггер позволяет пользователю указать набор действий, которые должны быть выполнены для обработки инструкции модификации данных. Таким образом, если для представления создан триггер INSTEAD OF, связанный с конкретной инструкцией модификации данных (INSERT, UPDATE или DELETE), соответствующее представление можно обновлять при помощи этой инструкции. Дополнительные сведения о триггерах INSTEAD OF см. в разделе Триггеры DML.
    • Секционированные представления Секционированное представление является в то же время и обновляемым, но при этом действуют некоторые ограничения. При необходимости ядро СУБД различает локальные секционированные представления как представления, в которых все участвующие таблицы и представление находятся в одном экземпляре SQL Server, а распределенные секционированные представления — представления, в которых по крайней мере одна из таблиц в представлении находится на другом или удаленном сервере.

    Секционированные представления

    В Azure Synapse Analytics в настоящее время секционированные представления не поддерживаются. Дополнительные сведения см. в статье Представления T-SQL с выделенным пулом SQL и бессерверным пулом SQL в Azure Synapse Analytics.

    Секционированное представление — это представление, определенное union ALL из таблиц членов, структурированных таким же образом, но хранится отдельно в нескольких таблицах в одном экземпляре SQL Server или в группе автономных экземпляров серверов SQL Server, называемых федеративными серверами баз данных.

    Предпочтительным способом локального секционирования данных на один сервер является применение секционированных таблиц. Дополнительные сведения см. в разделе Partitioned Tables and Indexes.

    При разработке схемы секционирования должно быть ясно, какие данные относятся к каждой секции. Например, данные таблицы Customers распределяются по трем таблицам на трех серверах: Customers_33 на сервере Server1 , Customers_66 на сервере Server2 и Customers_99 на сервере Server3 .

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

    --Partitioned view as defined on Server1 CREATE VIEW Customers AS --Select from local member table. SELECT * FROM CompanyData.dbo.Customers_33 UNION ALL --Select from member table on Server2. SELECT * FROM Server2.CompanyData.dbo.Customers_66 UNION ALL --Select from member table on Server3. SELECT * FROM Server3.CompanyData.dbo.Customers_99; 

    Как правило, представление считают секционированным, если оно соответствует следующему формату:

    SELECT FROM T1 UNION ALL SELECT FROM T2 UNION ALL . SELECT FROM Tn; 

    Требования к созданию секционированных представлений

    1. list выборки.
    2. В списке столбцов определения представления выберите все столбцы таблиц-элементов.
    3. Столбцы, занимающие одну и ту же порядковую позицию в каждом select list , должны иметь одинаковый тип, включая параметры сортировки. Типы столбцов не просто должны поддерживать неявное преобразование друг в друга: в отличие от оператора UNION в данном случае этого недостаточно. Кроме того, хотя бы один столбец (например, ) должен входить во все списки выбора в одной и той же порядковой позиции. Определите столбец таким образом, чтобы для таблиц-элементов T1, . Tn в столбце были определены ограничения CHECK с идентификаторами C1, . Cn соответственно. Ограничение C1 , определенное для таблицы T1 , должно иметь следующий формат:

    C1 ::= < simple_interval >[ OR < simple_interval >OR . ] < simple_interval >:: = < col > < < | >| \= | = < value >> | < col >BETWEEN < value1 >AND < value2 >| < col >IN ( value_list ) | < col > < >| >= > < value1 >AND < col >

    • Столбец секционирования является частью первичного ключа (PRIMARY KEY) таблицы.
    • Он не может быть вычисляемым столбцом, столбцом идентификаторов, столбцом по умолчанию или столбцом типа timestamp.
    • Если для одного столбца таблицы-элемента определено более одного ограничения, ядро СУБД пропускает все ограничения и не учитывает их при определении того, является ли представление секционированным. Чтобы выполнялись требования к секционированному представлению, со столбцом секционирования должно быть связано только одно ограничение секционирования.
    • На возможность обновления столбца секционирования никакие ограничения не распространяются.
    • Эти таблицы могут быть локальными таблицами или таблицами с других компьютеров, на которых ссылается SQL Server с помощью четырех частей или имени OPENDATASOURCE или OPENROWSET. Синтаксис функций OPENDATASOURCE и OPENROWSET позволяет указать имя таблицы, но не передаваемого запроса. Дополнительные сведения см. в разделе OPENDATASOURCE (Transact-SQL) и OPENROWSET (Transact-SQL). Если хотя бы одна таблица-элемент является удаленной, представление называется распределенным секционированным представлением, и тогда вступают в силу дополнительные требования. Они описаны ниже в данном разделе.
    • Одна таблица не может быть указана два раза в наборе таблиц, объединяемых при помощи инструкции UNION ALL.
    • Таблицы-элементы не могут иметь индексы, созданные для вычисляемых столбцов в таблице.
    • Все ограничения первичного ключа (PRIMARY KEY), действующие в таблицах-элементах, должны быть связаны с одинаковым количеством столбцов.
    • Всем таблицам-элементам в представлении должно быть назначено одинаковое значение заполнения ANSI. Его можно задать либо при помощи аргумента user options процедуры sp_configure, либо при помощи инструкции SET.

    Условия изменения данных в секционированных представлениях

    На инструкции, изменяющие секционированные представления, распространяются следующие ограничения:

    • В инструкции INSERT должны быть указаны значения для всех столбцов представления, даже если в базовых таблицах-элементах действует ограничение DEFAULT для этих столбцов или они допускают значения NULL. Для тех столбцов таблиц-элементов, которые имеют определения DEFAULT, в инструкциях нельзя явно использовать ключевое слово DEFAULT.
    • Значение, вставляемое в столбец секционирования, должно отвечать по крайней мере одному из базовых ограничений. В противном случае операция вставки завершится ошибкой из-за нарушения ограничений.
    • В предложении SET инструкции UPDATE в качестве значения не может быть указано ключевое слово DEFAULT, даже если столбец имеет значение DEFAULT, определенное в соответствующей таблице-элементе.
    • Столбец представления, который является столбцом идентификаторов в одной или нескольких таблицах-элементах, не может быть изменен при помощи инструкции INSERT или UPDATE.
    • Если одна из таблиц-элементов содержит столбец timestamp, представление не может быть изменено при помощи инструкции INSERT или UPDATE.
    • Если одна из таблиц-элементов содержит триггер, ограничение ON UPDATE CASCADE/SET NULL/SET DEFAULT или ограничение ON DELETE CASCADE/SET NULL/SET DEFAULT, то представление не может быть изменено.
    • Выполнение операций INSERT, UPDATE и DELETE для секционированного представления не допускается, если осуществляется самосоединение с тем же представлением или с какой-либо из таблиц-элементов, указанных в инструкции.
    • Массовый импорт данных в секционируемое представление не поддерживается bcp или BULK INSERT и INSERT . Инструкции SELECT * FROM OPENROWSET(BULK. ). Однако можно вставить в секционированное представление несколько строк с помощью инструкции INSERT.

    Примечание. Для обновления секционированного представления пользователь должен иметь связанные с таблицами-элементами разрешения INSERT, UPDATE и DELETE.

    Дополнительные требования, предъявляемые к распределенным секционированным представлениям

    При работе с распределенными секционированными представлениями (если одна или несколько таблиц-элементов являются удаленными) действуют следующие дополнительные требования.

    • Для обеспечения атомарности операций на всех узлах, затрагиваемых операцией обновления, запускается распределенная транзакция.
    • Чтобы инструкция INSERT, UPDATE или DELETE была выполнена успешно, установите параметр XACT_ABORT SET в значение ON.
    • Любые столбцы удаленных таблиц типа smallmoney, фигурирующих в секционированном представлении, сопоставляются как тип money. Таким образом, соответствующие им столбцы локальных таблиц (столбцы, занимающие те же порядковые позиции в списке выбора) должны также иметь тип money.
    • При уровне совместимости базы данных 110 и выше любые столбцы типа smalldatetime в удаленных таблицах, фигурирующих в секционированном представлении, сопоставляются как тип smalldatetime. Соответствующие им столбцы локальных таблиц (столбцы, занимающие те же порядковые позиции в списке выбора) должны иметь тип smalldatetime. Это изменение поведения с предыдущих версий SQL Server, в которых любые столбцы в удаленных таблицах типа smalldatetime, на которые ссылается секционированное представление, сопоставляются как datetime и соответствующие столбцы в локальных таблицах должны иметь тип datetime. Дополнительные сведения см. в разделе Уровень совместимости ALTER DATABASE (Transact-SQL).
    • Никакой связанный сервер в секционированном представлении не может быть замкнут на себя. Это связанный сервер, указывающий на тот же экземпляр SQL Server.

    При выполнении операций INSERT, UPDATE и DELETE, в которых задействованы обновляемые секционированные представления и удаленные таблицы, параметр SET ROWCOUNT не учитывается.

    Если существуют таблицы-члены и определение секционированного представления, оптимизатор запросов SQL Server создает интеллектуальные планы, которые эффективно используют запросы для доступа к данным из таблиц-членов. При наличии определений ограничения CHECK обработчик запросов составляет карту распределения значений ключей по таблицам-элементам. Когда пользователь выполняет запрос, обработчик запросов сравнивает карту со значениями, указанными в предложении WHERE, и создает план выполнения, позволяющий свести к минимуму объем передачи данных между серверами-элементами. Таким образом, хотя некоторые таблицы-члены могут находиться на удаленных серверах, экземпляр SQL Server разрешает распределенные запросы, чтобы объем передаваемых данных был минимальным.

    Аспекты, связанные с репликацией

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

    • Если базовые таблицы задействованы в репликации слиянием или репликации транзакций с обновляемыми подписками, в список выбора должен быть включен столбец uniqueidentifier. При выполнении любых операций INSERT в секционированном представлении необходимо предоставлять значение NEWID() для столбца uniqueidentifier. При выполнении любых операций UPDATE для столбца uniqueidentifier необходимо предоставлять значение NEWID(), так как ключевое слово DEFAULT использовать при этом нельзя.
    • Репликация обновлений, производимых при помощи представления, выполняется так же, как и при репликации таблиц в разных базах данных: таблицы обслуживаются различными агентами репликации, и определенный порядок выполнения обновлений не гарантируется.

    Разрешения

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

    Примеры

    В следующих примерах используется AdventureWorks2022 база данных или AdventureWorksDW2022 база данных.

    А. Использование простого разрешения CREATE VIEW

    В следующем фрагменте представление создается при помощи простой инструкции SELECT . Это полезно, если нужно часто выполнять запросы с сочетанием столбцов. Данные из этого представления поступают из HumanResources.Employee Person.Person базы данных AdventureWorks2022 и таблиц. Эти данные предоставляют сведения о дате и дате найма для сотрудников циклов Adventure Works. Такое представление можно было бы создать, например для человека, следящего за профессиональными юбилеями, при этом не предоставляя ему доступ ко всем данным, хранящимся в этих таблицах.

    CREATE VIEW hiredate_view AS SELECT p.FirstName, p.LastName, e.BusinessEntityID, e.HireDate FROM HumanResources.Employee e JOIN Person.Person AS p ON e.BusinessEntityID = p.BusinessEntityID ; GO 

    B. Использование WITH ENCRYPTION

    Следующий пример поясняет применение параметра WITH ENCRYPTION и обращение к вычисляемым, переименованным и множественным столбцам.

    Область применения: SQL Server 2008 (10.0.x) и более поздних версий и База данных SQL.

    CREATE VIEW Purchasing.PurchaseOrderReject WITH ENCRYPTION AS SELECT PurchaseOrderID, ReceivedQty, RejectedQty, RejectedQty / ReceivedQty AS RejectRatio, DueDate FROM Purchasing.PurchaseOrderDetail WHERE RejectedQty / ReceivedQty > 0 AND DueDate > CONVERT(DATETIME,'20010630',101) ; GO 

    C. Использование WITH CHECK OPTION

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

    CREATE VIEW dbo.SeattleOnly AS SELECT p.LastName, p.FirstName, e.JobTitle, a.City, sp.StateProvinceCode FROM HumanResources.Employee e INNER JOIN Person.Person p ON p.BusinessEntityID = e.BusinessEntityID INNER JOIN Person.BusinessEntityAddress bea ON bea.BusinessEntityID = e.BusinessEntityID INNER JOIN Person.Address a ON a.AddressID = bea.AddressID INNER JOIN Person.StateProvince sp ON sp.StateProvinceID = a.StateProvinceID WHERE a.City = 'Seattle' WITH CHECK OPTION ; GO 

    D. Использование встроенных функций в представлении

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

    CREATE VIEW Sales.SalesPersonPerform AS SELECT TOP (100) SalesPersonID, SUM(TotalDue) AS TotalSales FROM Sales.SalesOrderHeader WHERE OrderDate > CONVERT(DATETIME,'20001231',101) GROUP BY SalesPersonID; GO 

    Д. Использование секционированных данных

    В следующем примере используются таблицы SUPPLY1 , SUPPLY2 , SUPPLY3 и SUPPLY4 . Они соответствуют таблицам поставщиков из четырех офисов, расположенных в разных странах и регионах.

    --Create the tables and insert the values. CREATE TABLE dbo.SUPPLY1 ( supplyID INT PRIMARY KEY CHECK (supplyID BETWEEN 1 and 150), supplier CHAR(50) ); CREATE TABLE dbo.SUPPLY2 ( supplyID INT PRIMARY KEY CHECK (supplyID BETWEEN 151 and 300), supplier CHAR(50) ); CREATE TABLE dbo.SUPPLY3 ( supplyID INT PRIMARY KEY CHECK (supplyID BETWEEN 301 and 450), supplier CHAR(50) ); CREATE TABLE dbo.SUPPLY4 ( supplyID INT PRIMARY KEY CHECK (supplyID BETWEEN 451 and 600), supplier CHAR(50) ); GO --Create the view that combines all supplier tables. CREATE VIEW dbo.all_supplier_view WITH SCHEMABINDING AS SELECT supplyID, supplier FROM dbo.SUPPLY1 UNION ALL SELECT supplyID, supplier FROM dbo.SUPPLY2 UNION ALL SELECT supplyID, supplier FROM dbo.SUPPLY3 UNION ALL SELECT supplyID, supplier FROM dbo.SUPPLY4; GO INSERT dbo.all_supplier_view VALUES ('1', 'CaliforniaCorp'), ('5', 'BraziliaLtd') , ('231', 'FarEast'), ('280', 'NZ') , ('321', 'EuroGroup'), ('442', 'UKArchip') , ('475', 'India'), ('521', 'Afrique'); GO 

    Примеры: Azure Synapse Analytics и система платформы аналитики (PDW)

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

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

    CREATE VIEW DimEmployeeBirthDates AS SELECT FirstName, LastName, BirthDate FROM DimEmployee; 

    G. Создание представления путем соединения двух таблиц

    В следующем примере представление создается при помощи инструкции SELECT с OUTER JOIN . Результаты запроса на соединение заполняют представление.

    CREATE VIEW view1 AS SELECT fis.CustomerKey, fis.ProductKey, fis.OrderDateKey, fis.SalesTerritoryKey, dst.SalesTerritoryRegion FROM FactInternetSales AS fis LEFT OUTER JOIN DimSalesTerritory AS dst ON (fis.SalesTerritoryKey=dst.SalesTerritoryKey); 

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

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

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

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

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

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

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

    Если достаточно часто в своих 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, рекомендую прочитать книгу «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.

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

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

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

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

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

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

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