пользовательские параметры синтаксиса transact sql прописываются

Синтаксические обозначения в Transact-SQL (Transact-SQL)

В следующей таблице перечислены и описаны соглашения, которые используются в синтаксисе в справочнике по Transact-SQL.

Многочастные имена

Если не указано иное, все ссылки Transact-SQL на имена объектов базы данных могут быть четырехсоставными именами, записываемыми в следующей форме.

server_name
Указывает имя связанного или удаленного сервера.

database_name
Указывает имя базы данных SQL Server, если объект хранится на локальном экземпляре SQL Server. Когда объект находится на связанном сервере, аргумент database_name указывает каталог OLE DB.

schema_name
Если объект находится в базе данных SQL Server, указывает имя схемы, которая содержит объект. Когда объект находится на связанном сервере, аргумент schema_name указывает имя схемы OLE DB.

object_name
Ссылается на имя объекта.

При ссылке на конкретный объект нет необходимости всякий раз указывать сервер, базу данных и схему — компонент Компонент SQL Server Database Engine попытается определить этот объект. Однако, если объект не удается найти, возвращается ошибка.

Чтобы избежать ошибок разрешения имен, при указании объекта области схемы рекомендуется указать имя схемы.

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

Формат ссылки на объектОписание
server.database.schema.objectЧетырехчастное имя.
server.database..objectИмя схемы пропущено.
server..schema.objectИмя базы данных пропущено.
server. objectИмя базы данных и имя схемы пропущены.
database.schema.objectИмя сервера пропущено.
database..objectИмя сервера и имя схемы пропущены.
schema.objectИмя сервера и имя базы данных пропущены.
objectИмена сервера, базы данных и схемы пропущены.

Соглашения примеров кода

Если не указано иное, примеры, приведенные в справочнике по Transact-SQL, были проверены с использованием среды SQL Server Management Studio и настроек по умолчанию для следующих параметров:

Большинство примеров кода в руководстве по Transact-SQL было проверено на серверах, работающих с порядком сортировки с учетом регистра. Тестовые серверы, как правило, использовали кодовую страницу ANSI/ISO 1252.

Многие примеры кода добавляют к строковым константам в Юникоде префикс в виде буквы N. Без префикса N строка преобразуется в кодовую страницу базы данных по умолчанию. Кодовая страница по умолчанию может не распознавать определенные символы.

Ссылки «Относится к»

Ссылка Transact-SQL включает разделы, относящиеся к SQL Server (SQL Server 2008 и выше), База данных SQL Azure и Azure Synapse Analytics.

В верхней части каждой статьи есть раздел, где указано, к каким продуктам относится тема статьи. Если продукт не указан, то компонент, описанный в статье, для данного продукта недоступен. Например, группы доступности были введены в SQL Server 2012 (11.x). В статье о CREATE AVAILABILITY GROUP указано, что эта функция применима к SQL Server (SQL Server 2012 (11.x) и выше), так как она неприменима к SQL Server 2008, SQL Server 2008 R2 или База данных SQL Azure.

К продукту относится общая тема статьи, но в некоторых случаях не все аргументы поддерживаются. Например, пользователи автономной базы данных впервые появились в SQL Server 2012 (11.x). Инструкцию CREATE USER можно применять в любом продукте SQL Server, однако синтаксис WITH PASSWORD не может использоваться с более ранними версиями. Дополнительные разделы Область применения вставляются в описания соответствующих аргументов в статье.

Источник

Указание параметров

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

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

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

Передача значений в параметры

Значения параметра, переданные при вызове процедуры, должны быть константами или переменными. Имя функции не может быть значением параметра. Переменные могут быть пользовательскими или системными, например @@spid.

Указание имен параметров

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

При указании одного значения параметра в формате @parameter = value необходимо точно так же предоставить все последующие параметры. Если значения параметра передаются не в формате @parameter = value, значения должны передаваться в том порядке (слева направо), в котором они перечислены в инструкции CREATE PROCEDURE.

Передача параметров в формате @parameter = value с ошибками приведет к возникновению ошибки SQL Server и невозможности выполнения процедуры.

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

Параметры должны быть определены с типом данных в момент объявления в инструкции CREATE PROCEDURE. Тип данных параметра определяет тип и диапазон допустимых значений параметра при вызове процедуры. Например, параметр типа tinyint может принимать только численные значения в диапазоне от 0 до 255 в момент передачи этому параметру. При попытке выполнить процедуру со значением, не совместимым с типом данных, происходит ошибка.

Указание значений параметра по умолчанию

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

Значение параметра по умолчанию используется, когда:

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

в качестве значения при вызове процедуры указывается ключевое слово DEFAULT.

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

Параметры по умолчанию не поддерживаются для Azure Synapse Analytics и Parallel Data Warehouse.

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

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

Хотя разрешается опустить параметры, для которых предоставлены значения по умолчанию, можно лишь подвергнуть усечению список параметров. Например, если у процедуры пять параметров, можно опустить как четвертый, так и пятый параметр. При этом нельзя пропустить четвертый параметр, если включен пятый, если только параметры не передаются в формате @parameter = value.

Указание направления параметров

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

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

Переменная OUTPUT должна быть определена во время создания процедуры, а также в ходе использования переменной. Имена параметра и переменной не должны совпадать. При этом тип данных и положение параметра должны быть одинаковыми (если только не используется @listprice= переменная).

Источник

Параметры редактора Transact-SQL

Этот раздел содержит сведения о некоторых параметрах редактора Transact-SQL. Чтобы настроить эти параметры, откройте меню Средства/Параметры и перейдите в диалоговое окно Параметр.

Выполнение запроса

СвойствоОписание
SET ROWCOUNTЗначение по умолчанию, равное 0, указывает на то, что SQL Server будет продолжать ожидание результатов, пока все из них не будут получены. При установке значения больше 0 SQL Server прервет запрос после получения указанного числа строк. Для выключения этого параметра (чтобы возвращались все строки) задайте SET ROWCOUNT 0.
SET TEXTSIZEЗначение по умолчанию, равное 2 147 483 647 байт, указывает на то, что SQL Server предоставит содержимое поля полностью вплоть до пределов для полей данных text, ntext, nvarchar(max) и varchar(max). Этот параметр не влияет на тип данных xml. Задав меньшее число, можно ограничить вывод результатов в случае больших значений. Содержимое столбцов большего размера, чем заданное число, будет усекаться.
Время ожидания выполненияУказывает число секунд ожидания перед отменой запроса. Значение, равное 0, указывает на неограниченное время ожидания или отсутствие времени ожидания.
По умолчанию открывать новые запросы в режиме SQLCMDПри установке этого флажка новые запросы будут открываться в режиме SQLCMD. Этот флажок становится видимым только в случае, если диалоговое окно открыто из меню Средства.

При выборе этого параметра следует учитывать следующие ограничения.

Результаты запроса

СвойствоОписание
Включение запроса в результирующий наборВозвращает текст запроса как часть результирующего набора.
Включение заголовков столбцов при копировании или сохранении результатовВключает верхние колонтитулы столбцов (заголовки) при копировании результатов в буфер обмена или при сохранении файла. Снимите этот флажок, если нужно, чтобы при сохранении или копировании данных результатов они содержали только данные, без заголовков столбцов.
Сброс результатов после выполненияОсвобождает память посредством сбрасывания результатов запроса после того, как они были выведены на экран.
Отображение результатов на отдельной вкладкеОтобразить результирующий набор в новом окне документа, а не в нижней части окна документа запроса.
Переключение на вкладку результатов после выполнения запросаАвтоматически переводит изображение на экране к результирующему набору.
Максимальное число полученных символовДанные не в формате XML:

Введите число от 1 до 65 535, чтобы указать максимальное число символов, отображаемых в каждой ячейке. Примечание. Указание слишком большого числа символов может привести к тому, что результирующий набор будет отображаться усеченным. Максимальное число символов, отображаемых в каждой ячейке, зависит от размера шрифта. Высокое значение в этом окне может привести к нехватке памяти для среды SQL Server Management Studio и снижению производительности системы при возвращении больших результирующих наборов.

Источник

Просто о Transact-SQL

SQL в его исходном виде является информационно-логическим языком, а не языком программирования, но вместе SQL предусматривает возможность его процедурных расширений, с учётом которых язык уже вполне может рассматриваться в качестве языка программирования.

В настоящее время широко распространенны следующие спецификации SQL:

Базы данных и спецификации SQL

Тип базы данныхСпецификация SQL
Microsoft SQLTransact-SQL
Microsoft Jet/AccessJet SQL
MySQLSQL/PSM (SQL/Persistent Stored Module)
OraclePL/SQL (Procedural Language/SQL)
IBM DB2SQL PL (SQL Procedural Language)
InterBase/FirebirdPSQL (Procedural SQL)

В данной статье будет рассмотрена спецификация Transact-SQL, которая используется серверами Microsoft SQL. А так как база у всех спецификаций SQL одинаковая, то большинство команд и сценариев с легкостью переносятся на другие типы SQL.

Язык Transact-SQL является ключом к использованию SQL Server. Все приложения, взаимодействующие с экземпляром SQL Server, независимо от их реализации и пользовательского интерфейса, отправляют серверу инструкции Transact-SQL.

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

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

В результате работы сценария на SQL сервере будет создана база данных TestDatabase с пятью пользовательскими таблицами: Users, Departments, Positions, Local Customers, Local Orders.

Users

UserIDUserNameUserSurnameDepartmentIDPositionID
1IvanPetrov11
2IvanSidorov12
3PetrIvanov13
4NikolayPetrov13
5NikolayIvanov21
6SergeySidorov23
7AndreyBukin23
8ViktorRybakov41
Positions

PositionIDPositionNameBaseSalary
1Manager1000
2Senior analyst650
3Analyst400
Local Orders

OrderIDCustomerIDUserIDDescription
111Special parts
Departments

DepartmentIDDepartmentName
1Production
2Distribution
3Purchasing
Local Customers

CustomerIDCustomerNameCustomerAddress
1Alex Company606443, Russia, Bor, Lenina str., 15
2Potrovka115516, Moscow, Promyshlennaya str., 1

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

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

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

Объявление переменной выполняется командой DECLARE, задание значения переменной осуществляется либо командой SET, либо SELECT:

Спецификация Transact-SQl значительно расширяет стандартные возможности SQL благодаря встроенным функциям:

В Transact-SQL существуют специальные команды, которые позволяют управлять потоком выполнения сценария, прерывая его или направляя в нужную логику.

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

По умолчанию в команде SELECT используется параметр ALL, который можно не указывать. Если в команде указать параметр DISTINCT, то в результат попадут только уникальные (неповторяющиеся) записи из выборки.

Для того, чтобы изменить имена объектов в командах к SQL-серверу, используется команда AS. Использование этой команды помогает сокращать длину строки запроса, а так же получать результат в более удобочитаемом виде.

CustomerIDCustomerNameCustomerAddress
1Alex Company606443, Russia, Bor, Lenina str., 15′)
2Potrovka115516, Moscow, Promyshlennaya str., 1
Department Name
Production
Distribution
Purchasing
UserName
Andrey
Ivan
Nikolay
Petr
Sergey
Viktor

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

Фильтрация позволяет использовать подзапросы, то есть конструировать запрос из нескольких подзапросов:

PositionID
3
UserIDUserNameUserSurnameDepartmentIDPositionID
4NikolayPetrov13
6SergeySidorov23
UserIDUserNameUserSurnameDepartmentIDPositionID
1IvanPetrov11
2IvanSidorov12
7AndreyBukin22
Department nameSummary salary
Production2700.0000

Для сортировки данных в выборке используется командаORDER BY, но следует учесть, что эта команда не сортирует данные типа text, ntext и image. По умолчанию сортировка производится по возрастанию, поэтому параметр ASC в этом случае можно не указывать:

Для того, чтобы ограничить количество строк в результате запроса, используется командаTOP:

Внутри запроса можно проводить вычисления над полученными данными. Для этого используюся функции агрегирования:

Примеры использования команд ORDER, TOP и функций агрегирования:

UserName
Andrey
Ivan
Nikolay
UserIDUserNameUserSurnameDepartmentIDPositionID
1IvanPetrov11
2IvanSidorov12
(No column name)
1000.0000
PositionIDPositionNameBaseSalary
1Manager1000.0000
UserIDUserNameUserSurnameDepartmentIDPositionID
1IvanPetrov11
5NikolayIvanov21
8ViktorRybakov41
(No column name)
3

SQL позволяет производить группировку данных по определенным полям таблицы. Чтобы сгруппировать данные по какому-нибудь параметру, в SQL-запросе необходимо написать команду GROUP BY, в которой указать имя колонки, по которой производится группировка. Колонки, упомянутые в команде GROUP BY, должны присутствовать в команде SELECT, а так же команда SELECT должна содержать функцию агрегирования, которая будет применена к сгруппированным данным.

DepartmentIDNumber of users
14
23
41

Чтобы отфильтровать строки в запросе с группировкой применяется специальная команда HAVING, в которой указывается условие фильтрации. Колонки, по которым производится фильтрация, должны присутствовать в команде GROUP BY. Команда HAVING может использоваться и без GROUP BY, в этом случае она работает аналогично команде WHERE, но она разрешает применять в условиях фильтрации только функции агрегирования.

DepartmentIDNumber of users
14

Команда группировки может дополняться оператором WITH ROLLUP, который дополняет результат группировки сводной строкой с суммой значений колонок.

DepartmentIDNumber of users
14
23
41
NULL8
DepartmentIDPositionIDNumber of users
111
122
131
1NULL4
211
221
231
2NULL3
411
4NULL1
NULLNULL8

Команда группировки также может дополняться оператором WITH CUBE, который дополняет формирует всевозможные комбинации из группируемых колонок: если есть N колонок, то получится 2^N комбинаций.

DepartmentIDPositionIDNumber of users
111
122
131
1NULL4
211
221
231
2NULL3
411
4NULL1
NULLNULL8
NULL13
NULL23
NULL32

Функция агрегирования GROUPING позволяет определить, была ли запись добавлена командами ROLLUP и CUBE, или это запись получена из источника данных.

DepartmentIDNumber of usersAdded row
140
230
410
NULL81

Еще одна команда группировки COMPUTE позволяет группировать данные и выводить по ним отчет в разные таблицы. То есть команда GROUP BY с операторами ROLLUP и CUBE группирует данные и дописывает в таблицу дополнительны строки с отчетом, а команда COMPUTE группирует данные, разрывая исходную таблицу на несколько подтаблиц, а также формирует подтаблицы с отчетами. Команда COMPUTE может использоваться в двух режимах:

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

UserIDUserNameUserSurnameDepartmentIDPositionID
1IvanPetrov11
2IvanSidorov12
3PetrIvanov12
4NikolayPetrov13
5NikolayIvanov21
6SergeySidorov23
7AndreyBukin22
8ViktorRybakov41
cnt
8
UserIDUserNameUserSurnameDepartmentIDPositionID
1IvanPetrov11
2IvanSidorov12
3PetrIvanov12
4NikolayPetrov13
cnt
4
UserIDUserNameUserSurnameDepartmentIDPositionID
5NikolayIvanov21
6SergeySidorov23
7AndreyBukin22
cnt
3
UserIDUserNameUserSurnameDepartmentIDPositionID
8ViktorRybakov41
cnt
1

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

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

UserIDUserNameUserSurnameDepartmentIDPositionID
1IvanPetrov11
2IvanSidorov12
4NikolayPetrov13
UserIDUserNameUserSurnameDepartmentIDPositionID
1IvanPetrov11
2IvanSidorov12
1IvanPetrov11
4NikolayPetrov13

Горизонтальное соединение производится путем сцепки нескольких таблиц по ключевым колонкам. Самое простое горизонтальное соединение выполняется с помощью команды INNER JOIN, которая сцепляет таблицы, выбирая строки по ключевому полю, которое встречается в обоих таблицах.

Чтобы выполнить сцепление по всем полям левой таблицы, независимо, есть ли такие записи в правой таблице, необходимо использовать команду LEFT JOIN. Эта команда соединяет таблицы, выбирая все строки из левой таблицы, а отсутствующие данные правой таблицы заполняются значением NULL.

Команда RIGHT JOIN аналогична предыдущей, разница заключается лишь в том, что она соединяет таблицы, выбирая все строки из правой таблицы, а отсутствующие данные левой таблицы заполняются значением NULL.

Команда FULL JOIN объединяет в себе левое и правое сцепление, то есть она соединяет таблицы, выбирая строки из обоих таблиц, а отсутствующие данные заполняются значением NULL.

Сцепление не ограничивается только двумя таблицами, запрос может содержать несколько команда JOIN, что очень удобно при формировании конечных отчетов. Ниже приведены примеры для всех команд соединения таблиц.

UserIDUserNameUserSurnameDepartmentIDPositionIDDepartmentIDDepartmentName
1IvanPetrov111Production
2IvanSidorov121Production
3PetrIvanov121Production
4NikolayPetrov131Production
5NikolayIvanov212Distribution
6SergeySidorov232Distribution
7AndreyBukin222Distribution
UserIDUserNameUserSurnameDepartmentIDPositionIDDepartmentIDDepartmentName
1IvanPetrov111Production
2IvanSidorov121Production
3PetrIvanov121Production
4NikolayPetrov131Production
5NikolayIvanov212Distribution
6SergeySidorov232Distribution
7AndreyBukin222Distribution
8ViktorRybakov41NULLNULL
UserIDUserNameUserSurnameDepartmentIDPositionIDDepartmentIDDepartmentName
1IvanPetrov111Production
2IvanSidorov121Production
3PetrIvanov121Production
4NikolayPetrov131Production
5NikolayIvanov212Distribution
6SergeySidorov232Distribution
7AndreyBukin222Distribution
NULLNULLNULLNULLNULL3Purchasing
UserIDUserNameUserSurnameDepartmentIDPositionIDDepartmentIDDepartmentName
1IvanPetrov111Production
2IvanSidorov121Production
3PetrIvanov121Production
4NikolayPetrov131Production
5NikolayIvanov212Distribution
6SergeySidorov232Distribution
7AndreyBukin222Distribution
NULLNULLNULLNULLNULL3Purchasing
8ViktorRybakov41NULLNULL
UserIDUserNameUserSurnameDepartmentIDPositionIDDepartmentIDDepartmentName
1IvanPetrov111Production
2IvanSidorov121Production
3PetrIvanov121Production
4NikolayPetrov131Production
5NikolayIvanov211Production
6SergeySidorov231Production
7AndreyBukin221Production
8ViktorRybakov411Production
1IvanPetrov112Distribution
2IvanSidorov122Distribution
3PetrIvanov122Distribution
4NikolayPetrov132Distribution
5NikolayIvanov212Distribution
6SergeySidorov232Distribution
7AndreyBukin222Distribution
8ViktorRybakov412Distribution
1IvanPetrov113Purchasing
2IvanSidorov123Purchasing
3PetrIvanov123Purchasing
4NikolayPetrov133Purchasing
5NikolayIvanov213Purchasing
6SergeySidorov233Purchasing
7AndreyBukin223Purchasing
8ViktorRybakov413Purchasing
DepartmentUser namePosition
NULLViktor RybakovManager
ProductionIvan PetrovManager
ProductionIvan SidorovSenior analyst
ProductionPetr IvanovSenior analyst
ProductionNikolay PetrovAnalyst
DistributionNikolay IvanovManager
DistributionAndrey BukinSenior analyst
DistributionSergey SidorovAnalyst

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

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

Для вставки данных в таблицы SQL-сервера используется команда INSERT INTO:

Вторая часть комнады является необязательной для MS SQL Server 2003, но MS JET SQL без этого слова будет выдавать ошибку синтаксиса. Вставка обычно производиться целострочно, то есть в комнаде указываются все колонки таблицы и значения, которые нужно в них занести. Если же колонка имеет значение по умолчанию или разрешает пустое значения, то в команде вставки эту колонку можно не указывать. Команда INSERT INTO также разрешает указывать вносимые данные не по порядку следования колонок, но в этом случае нужно обозначить используемый порядок колонок.

Для того, чтобы изменить значение ячейки таблицы, используется команда UPDATE:

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

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

Пример удаления всех данных:

Transact-SQL позволяет использовать временные таблицы, то есть таблицы, которые создаются в памяти сервера на время работы пользователя с базой данных. Временные таблицы могут иметь любое имя, но начинаться обязаны с символа #.

Хранимые процедуры и функции представляют собой набор SQL-операторов, которые можно сохранять на сервере. Если сценарий сохранен на сервере, то клиентам не придется повторно задавать одни и те же отдельные операторы, вместо этого они смогут обращаться к хранимой процедуре. Ситуации, когда хранимые процедуры особенно полезны:

Пример создания хранимой процедуры и хранимой функции:

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

Для увеличения производительности, то есть для быстрого выполнения запросов, следует помнить некоторые правила составления строк запросов:

Источник

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

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