Предложение FROM и JOIN, APPLY, PIVOT (Transact-SQL)FROM clause plus JOIN, APPLY, PIVOT (Transact-SQL)

Применимо к:Applies to: даSQL Server 2016 (13.x);SQL Server 2016 (13.x)yesSQL Server 2016 (13.x);SQL Server 2016 (13.x) и более поздние версии ДаБаза данных SQL AzureAzure SQL DatabaseYesБаза данных SQL AzureAzure SQL Database ДаУправляемый экземпляр SQL AzureAzure SQL Managed InstanceYesУправляемый экземпляр SQL AzureAzure SQL Managed Instance даAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics даПараллельное хранилище данныхParallel Data WarehouseyesПараллельное хранилище данныхParallel Data WarehouseПрименимо к:Applies to: даSQL Server 2016 (13.x);SQL Server 2016 (13.x)yesSQL Server 2016 (13.x);SQL Server 2016 (13.x) and later ДаБаза данных SQL AzureAzure SQL DatabaseYesБаза данных SQL AzureAzure SQL Database ДаУправляемый экземпляр SQL AzureAzure SQL Managed InstanceYesУправляемый экземпляр SQL AzureAzure SQL Managed Instance даAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics даПараллельное хранилище данныхParallel Data WarehouseyesПараллельное хранилище данныхParallel Data Warehouse

В Transact-SQL предложение FROM доступно для следующих инструкций:In Transact-SQL, the FROM clause is available on the following statements:

Как правило, предложение FROM требуется в инструкции SELECT.The FROM clause is usually required on the SELECT statement. Исключением является случай, когда не указаны столбцы таблицы, а заданы только литералы или переменные и арифметические выражения.The exception is when no table columns are listed, and the only items listed are literals or variables or arithmetic expressions.

В этой статье также рассматриваются следующие ключевые слова, которые могут использоваться в предложении FROM.This article also discusses the following keywords that can be used on the FROM clause:

  • JOINJOIN
  • APPLYAPPLY
  • PIVOTPIVOT

Значок ссылки на раздел Синтаксические обозначения в Transact-SQLTopic link icon Transact-SQL Syntax Conventions

СинтаксисSyntax

-- Syntax for SQL Server and Azure SQL Database  
  
[ FROM { <table_source> } [ ,...n ] ]   
<table_source> ::=   
{  
    table_or_view_name [ FOR SYSTEM_TIME <system_time> ] [ AS ] table_alias ]   
        [ <tablesample_clause> ]   
        [ WITH ( < table_hint > [ [ , ]...n ] ) ]   
    | rowset_function [ [ AS ] table_alias ]   
        [ ( bulk_column_alias [ ,...n ] ) ]   
    | user_defined_function [ [ AS ] table_alias ]  
    | OPENXML <openxml_clause>   
    | derived_table [ [ AS ] table_alias ] [ ( column_alias [ ,...n ] ) ]   
    | <joined_table>   
    | <pivoted_table>   
    | <unpivoted_table>  
    | @variable [ [ AS ] table_alias ]  
    | @variable.function_call ( expression [ ,...n ] )   
        [ [ AS ] table_alias ] [ (column_alias [ ,...n ] ) ]     
}  
<tablesample_clause> ::=  
    TABLESAMPLE [SYSTEM] ( sample_number [ PERCENT | ROWS ] )   
        [ REPEATABLE ( repeat_seed ) ]   
  
<joined_table> ::=   
{  
    <table_source> <join_type> <table_source> ON <search_condition>   
    | <table_source> CROSS JOIN <table_source>   
    | left_table_source { CROSS | OUTER } APPLY right_table_source   
    | [ ( ] <joined_table> [ ) ]   
}  
<join_type> ::=   
    [ { INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } } [ <join_hint> ] ]  
    JOIN  
  
<pivoted_table> ::=  
    table_source PIVOT <pivot_clause> [ [ AS ] table_alias ]  
  
<pivot_clause> ::=  
        ( aggregate_function ( value_column [ [ , ]...n ])   
        FOR pivot_column   
        IN ( <column_list> )   
    )   
  
<unpivoted_table> ::=  
    table_source UNPIVOT <unpivot_clause> [ [ AS ] table_alias ]  
  
<unpivot_clause> ::=  
    ( value_column FOR pivot_column IN ( <column_list> ) )   
  
<column_list> ::=  
    column_name [ ,...n ]   
  
<system_time> ::=  
{  
       AS OF <date_time>  
    |  FROM <start_date_time> TO <end_date_time>  
    |  BETWEEN <start_date_time> AND <end_date_time>  
    |  CONTAINED IN (<start_date_time> , <end_date_time>)   
    |  ALL  
}  
  
    <date_time>::=  
        <date_time_literal> | @date_time_variable  
  
    <start_date_time>::=  
        <date_time_literal> | @date_time_variable  
  
    <end_date_time>::=  
        <date_time_literal> | @date_time_variable  
-- Syntax for Azure Synapse Analytics and Parallel Data Warehouse  
  
FROM { <table_source> [ ,...n ] }  
  
<table_source> ::=   
{  
    [ database_name . [ schema_name ] . | schema_name . ] table_or_view_name [ AS ] table_or_view_alias 
    [<tablesample_clause>]  
    | derived_table [ AS ] table_alias [ ( column_alias [ ,...n ] ) ]  
    | <joined_table>  
}  
  
<tablesample_clause> ::=
    TABLESAMPLE ( sample_number [ PERCENT ] ) -- Azure Synapse Analytics only  
 
<joined_table> ::=   
{  
    <table_source> <join_type> <table_source> ON search_condition   
    | <table_source> CROSS JOIN <table_source> 
    | left_table_source { CROSS | OUTER } APPLY right_table_source   
    | [ ( ] <joined_table> [ ) ]   
}  
  
<join_type> ::=   
    [ INNER ] [ <join hint> ] JOIN  
    | LEFT  [ OUTER ] JOIN  
    | RIGHT [ OUTER ] JOIN  
    | FULL  [ OUTER ] JOIN  
  
<join_hint> ::=   
    REDUCE  
    | REPLICATE  
    | REDISTRIBUTE  

Примечание

Ссылки на описание синтаксиса Transact-SQL для SQL Server 2014 и более ранних версий, см. в статье Документация по предыдущим версиям.To view Transact-SQL syntax for SQL Server 2014 and earlier, see Previous versions documentation.

АргументыArguments

<table_source>
Указывает таблицу, представление, табличную переменную или источник производной таблицы с указанием или без указания псевдонима для использования в инструкции Transact-SQLTransact-SQL.Specifies a table, view, table variable, or derived table source, with or without an alias, to use in the Transact-SQLTransact-SQL statement. В инструкции можно использовать до 256 источников таблиц, хотя предел изменяется в зависимости от доступной памяти и сложности других выражений в запросе.Up to 256 table sources can be used in a statement, although the limit varies depending on available memory and the complexity of other expressions in the query. Отдельные запросы могут не поддерживать 256 источников таблиц.Individual queries may not support up to 256 table sources.

Примечание

Производительность выполнения запросов может снизиться из-за большого количества таблиц, указанных в запросе.Query performance may suffer with lots of tables referenced in a query. На время компиляции и оптимизации также влияют дополнительные факторы.Compilation and optimization time is also affected by additional factors. Они включают в себя наличие индексов и индексированных представлений в каждом <table_source> и размер <select_list> в инструкции SELECT.These include the presence of indexes and indexed views on each <table_source> and the size of the <select_list> in the SELECT statement.

Порядок источников таблицы после ключевого слова FROM не влияет на возвращаемый результирующий набор.The order of table sources after the FROM keyword does not affect the result set that is returned. SQL ServerSQL Server возвращает ошибки, если в предложении FROM появляются повторяющиеся имена.returns errors when duplicate names appear in the FROM clause.

table_or_view_nametable_or_view_name
Имя таблицы или представления.Is the name of a table or view.

Если таблица или представление существует в другой базе данных одного и того же экземпляра службы SQL ServerSQL Server, используйте полностью уточненное имя в форме база данных.схема.имя_объекта.If the table or view exists in another database on the same instance of SQL ServerSQL Server, use a fully qualified name in the form database.schema.object_name.

Если таблица или представление существует вне экземпляра службы SQL ServerSQL Serverl, используйте четырехчастное имя в форме связанный_свервер.каталог.схема.объект.If the table or view exists outside the instance of SQL ServerSQL Serverl, use a four-part name in the form linked_server.catalog.schema.object. Дополнительные сведения см. в статье sp_addlinkedserver (Transact-SQL).For more information, see sp_addlinkedserver (Transact-SQL). Для указания удаленного источника таблицы также можно использовать четырехкомпонентное имя, где в качестве компонента сервера используется функция OPENDATASOURCE.A four-part name that is constructed by using the OPENDATASOURCE function as the server part of the name can also be used to specify the remote table source. Если указана функция OPENDATASOURCE, то аргументы database_name и schema_name могут применяться не ко всем источникам данных, а в зависимости от возможностей поставщика OLE DB, который обращается к удаленному объекту.When OPENDATASOURCE is specified, database_name and schema_name may not apply to all data sources and is subject to the capabilities of the OLE DB provider that accesses the remote object.

[AS] table_alias[AS] table_alias
Псевдоним для table_source, который может использоваться как для удобства, так и для различения таблицы или представления в самосоединении или во вложенном запросе.Is an alias for table_source that can be used either for convenience or to distinguish a table or view in a self-join or subquery. Псевдоним часто является сокращенным именем таблицы, использующимся для соотнесения с определенными столбцами таблиц в соединении.An alias is frequently a shortened table name used to refer to specific columns of the tables in a join. Если имя столбца существует более чем в одной таблице соединения, SQL ServerSQL Server потребует, чтобы имя столбца было уточнено именем таблицы, представления или псевдонима.If the same column name exists in more than one table in the join, SQL ServerSQL Server requires that the column name be qualified by a table name, view name, or alias. Если определен псевдоним, нельзя использовать имя таблицы.The table name cannot be used if an alias is defined.

При использовании производной таблицы, набора строк или функции с табличным значением либо предложения оператора (как PIVOT или UNPIVOT) требуемый аргумент table_alias в конце предложения является соответствующим именем таблицы для всех возвращаемых столбцов, включая группирующие столбцы.When a derived table, rowset or table-valued function, or operator clause (such as PIVOT or UNPIVOT) is used, the required table_alias at the end of the clause is the associated table name for all columns, including grouping columns, returned.

WITH (<table_hint> )WITH (<table_hint> )
Указывает на то, что с данной таблицей и для данной инструкции оптимизатор запросов использует стратегию оптимизации или блокировки.Specifies that the query optimizer use an optimization or locking strategy with this table and for this statement. Дополнительные сведения см. в разделе Табличные указания (Transact-SQL).For more information, see Table Hints (Transact-SQL).

rowset_functionrowset_function

Применимо к: SQL Server 2008SQL Server 2008 и выше, а также База данных SQLSQL Database.Applies to: SQL Server 2008SQL Server 2008 and later and База данных SQLSQL Database.

Указывает одну из функций набора строк, например OPENROWSET, возвращающую объект, который можно использовать вместо ссылки на таблицу.Specifies one of the rowset functions, such as OPENROWSET, that returns an object that can be used instead of a table reference. Дополнительные сведения о списке функций набора строк см. в разделе Функции набора строк (Transact-SQL).For more information about a list of rowset functions, see Rowset Functions (Transact-SQL).

Использование функций OPENROWSET и OPENQUERY для задания удаленного объекта зависит от возможностей поставщика OLE DB, который обращается к удаленному объекту.Using the OPENROWSET and OPENQUERY functions to specify a remote object depends on the capabilities of the OLE DB provider that accesses the object.

bulk_column_aliasbulk_column_alias

Применимо к: SQL Server 2008SQL Server 2008 и выше, а также База данных SQLSQL Database.Applies to: SQL Server 2008SQL Server 2008 and later and База данных SQLSQL Database.

Дополнительный псевдоним для замены имени столбца в результирующем наборе.Is an optional alias to replace a column name in the result set. Псевдонимы столбца разрешены только в инструкциях SELECT, использующих функцию OPENROWSET с параметром BULK.Column aliases are allowed only in SELECT statements that use the OPENROWSET function with the BULK option. При использовании аргумента bulk_column_alias необходимо указать псевдоним для каждого столбца таблицы в том же порядке, что и в файле.When you use bulk_column_alias, specify an alias for every table column in the same order as the columns in the file.

Примечание

Данный псевдоним, если он присутствует, переопределяет атрибут NAME в элементах COLUMN файла XML.This alias overrides the NAME attribute in the COLUMN elements of an XML format file, if present.

user_defined_functionuser_defined_function
Указывает функцию с табличным значением.Specifies a table-valued function.

OPENXML <openxml_clause>OPENXML <openxml_clause>

Применимо к: SQL Server 2008SQL Server 2008 и выше, а также База данных SQLSQL Database.Applies to: SQL Server 2008SQL Server 2008 and later and База данных SQLSQL Database.

Обеспечивает представление XML-документа в виде набора строк.Provides a rowset view over an XML document. Дополнительные сведения см в разделе OPENXML (Transact-SQL).For more information, see OPENXML (Transact-SQL).

derived_tablederived_table
Это вложенный запрос, который извлекает строки из базы данных.Is a subquery that retrieves rows from the database. derived_table используется в качестве входных данных для внешнего запроса.derived_table is used as input to the outer query.

Чтобы указать несколько строк в параметре derived_table, можно воспользоваться конструктором табличных значений Transact-SQLTransact-SQL.derived_table can use the Transact-SQLTransact-SQL table value constructor feature to specify multiple rows. Например, SELECT * FROM (VALUES (1, 2), (3, 4), (5, 6), (7, 8), (9, 10) ) AS MyTable(a, b);.For example, SELECT * FROM (VALUES (1, 2), (3, 4), (5, 6), (7, 8), (9, 10) ) AS MyTable(a, b);. Дополнительные сведения см. в разделе Конструктор табличных значений (Transact-SQL).For more information, see Table Value Constructor (Transact-SQL).

column_aliascolumn_alias
Дополнительный псевдоним для замены имени столбца в результирующем наборе производной таблицы.Is an optional alias to replace a column name in the result set of the derived table. Для каждого столбца в списке выбора следует включить по одному псевдониму столбца и заключить весь список псевдонимов столбцов в скобки.Include one column alias for each column in the select list, and enclose the complete list of column aliases in parentheses.

table_or_view_name FOR SYSTEM_TIME <system_time>table_or_view_name FOR SYSTEM_TIME <system_time>

Применимо к: SQL Server 2016 (13.x);SQL Server 2016 (13.x) и выше, а также База данных SQLSQL Database.Applies to: SQL Server 2016 (13.x);SQL Server 2016 (13.x) and later and База данных SQLSQL Database.

Указывает, что конкретная версия данных возвращается из указанной темпоральной таблицы и связывается с таблицей журнала с системным управлением версиями.Specifies that a specific version of data is returned from the specified temporal table and its linked system-versioned history table

Предложение TablesampleTablesample clause

Применимо к: SQL Server, база данных SQLApplies to: SQL Server, SQL Database

Указывает, что из таблицы возвращается выборка данных.Specifies that a sample of data from the table is returned. Выборка может быть приблизительной.The sample may be approximate. Это предложение может использоваться в инструкциях SELECT или UPDATE в отношении любой первичной или присоединенной таблицы.This clause can be used on any primary or joined table in a SELECT or UPDATE statement. TABLESAMPLE не может быть указано для представлений.TABLESAMPLE cannot be specified with views.

Примечание

При использовании предложения TABLESAMPLE к базам данных, которые были обновлены до SQL ServerSQL Server, с уровнем совместимости базы данных 110 или больше, оператор PIVOT нельзя использовать в запросах рекурсивного обобщенного табличного выражения (CTE).When you use TABLESAMPLE against databases that are upgraded to SQL ServerSQL Server, the compatibility level of the database is set to 110 or higher, PIVOT is not allowed in a recursive common table expression (CTE) query. Дополнительные сведения см. в разделе Уровень совместимости инструкции ALTER DATABASE (Transact-SQL).For more information, see ALTER DATABASE Compatibility Level (Transact-SQL).

SYSTEMSYSTEM
Зависящий от реализации метод выборки, определенный стандартами ISO.Is an implementation-dependent sampling method specified by ISO standards. В SQL ServerSQL Server это единственно доступный метод выборки, и он применяется по умолчанию.In SQL ServerSQL Server, this is the only sampling method available and is applied by default. SYSTEM использует основанный на страницах метод выборки со случайным набором страниц, все строки которых возвращаются как подмножество выборки.SYSTEM applies a page-based sampling method in which a random set of pages from the table is chosen for the sample, and all the rows on those pages are returned as the sample subset.

sample_numbersample_number
Точное или приближенное константное числовое выражение, представляющее процент или количество строк.Is an exact or approximate constant numeric expression that represents the percent or number of rows. При указании PERCENT аргумент sample_number неявно преобразуется в тип float; в противном случае он преобразуется в тип bigint.When specified with PERCENT, sample_number is implicitly converted to a float value; otherwise, it is converted to bigint. PERCENT является параметром по умолчанию.PERCENT is the default.

PERCENTPERCENT
Указывает, что из таблицы должен быть извлечен процент строк таблицы, равный значению аргумента sample_number.Specifies that a sample_number percent of the rows of the table should be retrieved from the table. При указании PERCENT SQL ServerSQL Server возвращает приближенное значение указанного процента.When PERCENT is specified, SQL ServerSQL Server returns an approximate of the percent specified. При указании PERCENT выражение sample_number должно иметь значение от 0 до 100.When PERCENT is specified the sample_number expression must evaluate to a value from 0 to 100.

ROWSROWS
Указывает, что будет извлечено количество строк, приблизительно равное значению sample_number.Specifies that approximately sample_number of rows will be retrieved. При указании ROWS SQL ServerSQL Server возвращает приближенное значение количества указанных строк.When ROWS is specified, SQL ServerSQL Server returns an approximation of the number of rows specified. При указании ROWS результатом выражения sample_number должно быть целочисленное значение больше нуля.When ROWS is specified, the sample_number expression must evaluate to an integer value greater than zero.

REPEATABLEREPEATABLE
Указывает, что заданная выборка может быть возвращена снова.Indicates that the selected sample can be returned again. При указании такого же значения repeat_seedSQL ServerSQL Server будет возвращать то же подмножество строк до тех пор, пока не будут внесены изменения в какую-либо строку таблицы.When specified with the same repeat_seed value, SQL ServerSQL Server will return the same subset of rows as long as no changes have been made to any rows in the table. При указании другого значения repeat_seedSQL ServerSQL Server, скорее всего, вернет другую выборку строк таблицы.When specified with a different repeat_seed value, SQL ServerSQL Server will likely return some different sample of the rows in the table. Изменениями считаются следующие действия над таблицей: вставка, обновление, удаление, перестроение или дефрагментация индекса, а также восстановление или присоединение базы данных.The following actions to the table are considered changes: insert, update, delete, index rebuild or defragmentation, and database restore or attach.

repeat_seedrepeat_seed
Константное целочисленное выражение, используемое SQL ServerSQL Server для формирования случайного числа.Is a constant integer expression used by SQL ServerSQL Server to generate a random number. repeat_seed имеет тип bigint.repeat_seed is bigint. Если аргумент repeat_seed не указан, SQL ServerSQL Server присваивает значение случайным образом.If repeat_seed is not specified, SQL ServerSQL Server assigns a value at random. Для определенного значения аргумента repeat_seed результат выборки всегда тот же, если в таблице не было произведено никаких изменений.For a specific repeat_seed value, the sampling result is always the same if no changes have been applied to the table. Результат выражения repeat_seed должен быть целочисленным значением больше нуля.The repeat_seed expression must evaluate to an integer greater than zero.

Предложение TablesampleTablesample clause

Применимо к: Azure Synapse Analytics (Хранилище данных SQL)Azure Synapse Analytics (SQL Data Warehouse)Applies to: Azure Synapse Analytics (Хранилище данных SQL)Azure Synapse Analytics (SQL Data Warehouse)

Указывает, что из таблицы возвращается выборка данных.Specifies that a sample of data from the table is returned. Выборка может быть приблизительной.The sample may be approximate. Это предложение может использоваться в инструкциях SELECT или UPDATE в отношении любой первичной или присоединенной таблицы.This clause can be used on any primary or joined table in a SELECT or UPDATE statement. TABLESAMPLE не может быть указано для представлений.TABLESAMPLE cannot be specified with views.

PERCENTPERCENT
Указывает, что из таблицы должен быть извлечен процент строк таблицы, равный значению аргумента sample_number.Specifies that a sample_number percent of the rows of the table should be retrieved from the table. При указании PERCENT Azure Synapse Analytics (Хранилище данных SQL)Azure Synapse Analytics (SQL Data Warehouse) возвращает приближенное значение указанного процента.When PERCENT is specified, Azure Synapse Analytics (Хранилище данных SQL)Azure Synapse Analytics (SQL Data Warehouse) returns an approximate of the percent specified. При указании PERCENT выражение sample_number должно иметь значение от 0 до 100.When PERCENT is specified, the sample_number expression must evaluate to a value from 0 to 100.

Соединяемая таблицаJoined table

Соединяемая таблица — это результирующий набор, полученный из двух или более таблиц.A joined table is a result set that is the product of two or more tables. Для нескольких соединений следует использовать скобки, чтобы изменить естественный порядок соединений.For multiple joins, use parentheses to change the natural order of the joins.

Тип соединенияJoin type

Указание типа операции соединения.Specifies the type of join operation.

INNERINNER
Указывает, что возвращаются все совпадающие пары строк.Specifies all matching pairs of rows are returned. Отмена несовпадающих строк из обеих таблиц.Discards unmatched rows from both tables. Если тип соединения не указан, этот тип задается по умолчанию.When no join type is specified, this is the default.

FULL [ OUTER ]FULL [ OUTER ]
Указывает, что в результирующий набор включаются строки как из левой, так и из правой таблицы, несоответствующие условиям соединения, а выходные столбцы, соответствующие оставшейся таблице, устанавливаются в значение NULL.Specifies that a row from either the left or right table that does not meet the join condition is included in the result set, and output columns that correspond to the other table are set to NULL. Этим дополняются все строки, обычно возвращаемые при помощи INNER JOIN.This is in addition to all rows typically returned by the INNER JOIN.

LEFT [ OUTER ]LEFT [ OUTER ]
Указывает, что все строки из левой таблицы, не соответствующие условиям соединения, включаются в результирующий набор, а выходные столбцы из оставшейся таблицы устанавливаются в значение NULL в дополнение ко всем строкам, возвращаемым внутренним соединением.Specifies that all rows from the left table not meeting the join condition are included in the result set, and output columns from the other table are set to NULL in addition to all rows returned by the inner join.

RIGHT [ OUTER ]RIGHT [OUTER]
Указывает, что все строки из правой таблицы, не соответствующие условиям соединения, включаются в результирующий набор, а выходные столбцы, соответствующие оставшейся таблице, устанавливаются в значение NULL в дополнение ко всем строкам, возвращаемым внутренним соединением.Specifies all rows from the right table not meeting the join condition are included in the result set, and output columns that correspond to the other table are set to NULL, in addition to all rows returned by the inner join.

Указание соединенияJoin hint

Указывает, что оптимизатор запросов SQL ServerSQL Server для SQL ServerSQL Server и База данных SQLSQL Database использует одно указание соединения, или алгоритм выполнения, для каждого соединения, указанного в предложении FROM.For SQL ServerSQL Server and База данных SQLSQL Database, specifies that the SQL ServerSQL Server query optimizer use one join hint, or execution algorithm, per join specified in the query FROM clause. Дополнительные сведения см. в разделе Указания соединений (Transact-SQL).For more information, see Join Hints (Transact-SQL).

Для Azure Synapse Analytics (Хранилище данных SQL)Azure Synapse Analytics (SQL Data Warehouse) и Параллельное хранилище данныхParallel Data Warehouse эти указания соединения применяются к соединениям INNER по двум несовместимым столбцам распределения.For Azure Synapse Analytics (Хранилище данных SQL)Azure Synapse Analytics (SQL Data Warehouse) and Параллельное хранилище данныхParallel Data Warehouse, these join hints apply to INNER joins on two distribution incompatible columns. Они могут повысить производительность запросов, ограничивая объем перемещаемых данных, который происходит во время обработки запросов.They can improve query performance by restricting the amount of data movement that occurs during query processing. Допустимые указания соединения для Azure Synapse Analytics (Хранилище данных SQL)Azure Synapse Analytics (SQL Data Warehouse) и Параллельное хранилище данныхParallel Data Warehouse показаны ниже.The allowable join hints for Azure Synapse Analytics (Хранилище данных SQL)Azure Synapse Analytics (SQL Data Warehouse) and Параллельное хранилище данныхParallel Data Warehouse are as follows:

REDUCEREDUCE
Уменьшает количество подлежащих перемещению строк для таблицы в правой части соединения, чтобы сделать совместимыми два несовместимых столбца распределения.Reduces the number of rows to be moved for the table on the right side of the join in order to make two distribution incompatible tables compatible. Указание REDUCE также называется указанием полусоединения.The REDUCE hint is also called a semi-join hint.

REPLICATEREPLICATE
Приводит к репликации значений в столбце соединения из таблицы в левой части соединения на всех узлах.Causes the values in the joining column from the table on the left side of the join to be replicated to all nodes. Таблица в правой части соединяется с реплицированной версией этих столбцов.The table on the right is joined to the replicated version of those columns.

REDISTRIBUTEREDISTRIBUTE
Принудительно распространяет два источника данных на столбцы, указанные в предложении JOIN.Forces two data sources to be distributed on columns specified in the JOIN clause. Для распределенной таблицы Параллельное хранилище данныхParallel Data Warehouse выполнит перемещение в случайном порядке.For a distributed table, Параллельное хранилище данныхParallel Data Warehouse will perform a shuffle move. Для реплицированной таблицы Параллельное хранилище данныхParallel Data Warehouse выполнит обрезанное перемещение.For a replicated table, Параллельное хранилище данныхParallel Data Warehouse will perform a trim move. Сведения об этих типах перемещения см. в подразделе об операциях с планами запросов DMS в разделе с основными сведениями о планах запросов в Документация по Parallel Data WarehouseParallel Data Warehouse product documentation.To understand these move types, see the "DMS Query Plan Operations" section in the "Understanding Query Plans" topic in the Документация по Parallel Data WarehouseParallel Data Warehouse product documentation. Это указание может повысить производительность в случае, когда план запроса использует широковещательное перемещение для разрешения несовместимого соединения распределения.This hint can improve performance when the query plan is using a broadcast move to resolve a distribution incompatible join.

JOINJOIN
Указывает, что данная операция соединения должна произойти между указанными источниками или представлениями таблицы.Indicates that the specified join operation should occur between the specified table sources or views.

ON <search_condition>ON <search_condition>
Задает условие, на котором основывается соединение.Specifies the condition on which the join is based. Условие может указывать любой предикат, хотя чаще используются столбцы и операторы сравнения, например:The condition can specify any predicate, although columns and comparison operators are frequently used, for example:

SELECT p.ProductID, v.BusinessEntityID  
FROM Production.Product AS p   
JOIN Purchasing.ProductVendor AS v  
ON (p.ProductID = v.ProductID);  
  

Если условие указывает столбцы, их имена и типы данных могут не совпадать, однако, если типы данных не совпадают, столбцы должны либо быть совместимыми, либо иметь типы, которые SQL ServerSQL Server может неявно преобразовать.When the condition specifies columns, the columns do not have to have the same name or same data type; however, if the data types are not the same, they must be either compatible or types that SQL ServerSQL Server can implicitly convert. Если типы данных не могут быть преобразованы неявно, условие должно проводить явное преобразование типа данных при помощи функции CONVERT.If the data types cannot be implicitly converted, the condition must explicitly convert the data type by using the CONVERT function.

Могут существовать предикаты, использующие в предложении ON только одну из соединяемых таблиц.There can be predicates that involve only one of the joined tables in the ON clause. Такие предикаты также могут присутствовать в предложении WHERE запроса.Such predicates also can be in the WHERE clause in the query. Хотя размещение таких предикатов не оказывает влияния в случае внутренних соединений (INNER), при использовании внешних соединений (OUTER) они могут привести к другому результату.Although the placement of such predicates does not make a difference for INNER joins, they might cause a different result when OUTER joins are involved. Это происходит потому, что предикаты в предложении ON применяются к таблице до соединения, в то время как предложение WHERE семантически применяется к результату соединения.This is because the predicates in the ON clause are applied to the table before the join, whereas the WHERE clause is semantically applied to the result of the join.

Дополнительные сведения об условиях поиска и предикатах см. в статье Условие поиска (Transact-SQL).For more information about search conditions and predicates, see Search Condition (Transact-SQL).

CROSS JOINCROSS JOIN
Указывает перекрестное произведение двух таблиц.Specifies the cross-product of two tables. Возвращает те же строки, что и соединение без предложения WHERE в старом режиме, не совместимом с SQL-92.Returns the same rows as if no WHERE clause was specified in an old-style, non-SQL-92-style join.

left_table_source { CROSS | OUTER } APPLY right_table_sourceleft_table_source { CROSS | OUTER } APPLY right_table_source
Указывает, что right_table_source оператора APPLY определяется для каждой строки left_table_source.Specifies that the right_table_source of the APPLY operator is evaluated against every row of the left_table_source. Данная функциональность полезна в том случае, когда right_table_source содержит функцию с табличным значением, которая принимает значения столбцов left_table_source в качестве одного из своих аргументов.This functionality is useful when the right_table_source contains a table-valued function that takes column values from the left_table_source as one of its arguments.

Вместе с ключевым словом APPLY должно быть указано либо CROSS, либо OUTER.Either CROSS or OUTER must be specified with APPLY. Если указано CROSS, то при вычислении right_table_source для определенной строки left_table_source не создается ни одной строки и возвращается пустой результирующий набор.When CROSS is specified, no rows are produced when the right_table_source is evaluated against a specified row of the left_table_source and returns an empty result set.

При указании OUTER для каждой строки left_table_source создается одна строка, даже когда right_table_source вычисляется для этой строки и возвращается пустой результирующий набор.When OUTER is specified, one row is produced for each row of the left_table_source even when the right_table_source evaluates against that row and returns an empty result set.

Дополнительные сведения см. в разделе «Примечания».For more information, see the Remarks section.

left_table_sourceleft_table_source
Источник таблицы, определенный в предыдущем аргументе.Is a table source as defined in the previous argument. Дополнительные сведения см. в разделе «Примечания».For more information, see the Remarks section.

right_table_sourceright_table_source
Источник таблицы, определенный в предыдущем аргументе.Is a table source as defined in the previous argument. Дополнительные сведения см. в разделе «Примечания».For more information, see the Remarks section.

Предложение PIVOTPIVOT clause

table_source PIVOT <pivot_clause>table_source PIVOT <pivot_clause>
Указывает, что значение table_source основано на pivot_column.Specifies that the table_source is pivoted based on the pivot_column. table_source представляет собой таблицу или табличное выражение.table_source is a table or table expression. Выходными данными является таблица, содержащая все столбцы table_source, за исключением pivot_column и value_column.The output is a table that contains all columns of the table_source except the pivot_column and value_column. Столбцы table_source, кроме pivot_column и value_column, называются столбцами группирования оператора PIVOT.The columns of the table_source, except the pivot_column and value_column, are called the grouping columns of the pivot operator. Дополнительные сведения о PIVOT и UNPIVOT см. в разделе Использование операторов PIVOT и UNPIVOT.For more information about PIVOT and UNPIVOT, see Using PIVOT and UNPIVOT.

Оператор PIVOT применяет операцию группирования к входной таблице по отношению к столбцам группирования и возвращает одну строку для каждой группы.PIVOT performs a grouping operation on the input table with regard to the grouping columns and returns one row for each group. Кроме того, вывод содержит один столбец для каждого значения, указанного в column_list, который отображается в pivot_column в input_table.Additionally, the output contains one column for each value specified in the column_list that appears in the pivot_column of the input_table.

Дополнительные сведения см. в разделе «Замечания» далее.For more information, see the Remarks section that follows.

aggregate_functionaggregate_function
Системная или определяемая пользователем агрегатная функция, имеющая один или более входов.Is a system or user-defined aggregate function that accepts one or more inputs. Агрегатная функция должна быть инвариантной относительно значений NULL.The aggregate function should be invariant to null values. Инвариантная относительно нулевых значений агрегатная функция при определении статистического значения не учитывает нулевые значения в группе.An aggregate function invariant to null values does not consider null values in the group while it is evaluating the aggregate value.

Системная агрегатная функция COUNT(*) недопустима.The COUNT(*) system aggregate function is not allowed.

value_columnvalue_column
Столбец значений оператора PIVOT.Is the value column of the PIVOT operator. При использовании вместе с оператором UNPIVOT аргумент value_column не может быть именем существующего столбца во входном table_source.When used with UNPIVOT, value_column cannot be the name of an existing column in the input table_source.

FOR pivot_columnFOR pivot_column
Столбец сведения оператора PIVOT.Is the pivot column of the PIVOT operator. Аргумент pivot_column должен иметь тип данных, который может быть явно или неявно преобразован в тип данных nvarchar() .pivot_column must be of a type implicitly or explicitly convertible to nvarchar(). Этот столбец не может иметь тип image или rowversion.This column cannot be image or rowversion.

При использовании оператора UNPIVOT аргумент pivot_column является именем выходного столбца, полученного из table_source.When UNPIVOT is used, pivot_column is the name of the output column that becomes narrowed from the table_source. В table_source не может быть существующего столбца с таким именем.There cannot be an existing column in table_source with that name.

IN (column_list )IN (column_list )
В предложении PIVOT представлены все значения в аргументе pivot_column, которые станут именами столбцов выходной таблицы.In the PIVOT clause, lists the values in the pivot_column that will become the column names of the output table. В списке не могут быть указаны какие-либо имена столбцов, которые уже существуют во входном table_source, к которому применяется сведение.The list cannot specify any column names that already exist in the input table_source that is being pivoted.

В предложении UNPIVOT представлены столбцы в table_source, которые будут сведены в один столбец pivot_column.In the UNPIVOT clause, lists the columns in table_source that will be narrowed into a single pivot_column.

table_aliastable_alias
Псевдоним выходной таблицы.Is the alias name of the output table. Аргумент pivot_table_alias должен быть указан.pivot_table_alias must be specified.

UNPIVOT <unpivot_clause>UNPIVOT <unpivot_clause>
Указывает, что входная таблица сведена из нескольких столбцов в column_list в один столбец под названием pivot_column.Specifies that the input table is narrowed from multiple columns in column_list into a single column called pivot_column. Дополнительные сведения о PIVOT и UNPIVOT см. в разделе Использование операторов PIVOT и UNPIVOT.For more information about PIVOT and UNPIVOT, see Using PIVOT and UNPIVOT.

AS OF <date_time>AS OF <date_time>

Применимо к: SQL Server 2016 (13.x);SQL Server 2016 (13.x) и выше, а также База данных SQLSQL Database.Applies to: SQL Server 2016 (13.x);SQL Server 2016 (13.x) and later and База данных SQLSQL Database.

Возвращает таблицу с одной записью для каждой строки, содержащей значения, которые были фактическими (текущими) в указанный момент времени в прошлом.Returns a table with single record for each row containing the values that were actual (current) at the specified point in time in the past. На внутреннем уровне объединение выполняется между темпоральной таблицей и соответствующей таблицей журнала и результаты отфильтровываются так, чтобы возвращать значения в строке, которая была действительной на момент времени, определяемый параметром <date_time> .Internally, a union is performed between the temporal table and its history table and the results are filtered to return the values in the row that was valid at the point in time specified by the <date_time> parameter. Значение для строки считается действительным, если значение system_start_time_column_name меньше или равно значению параметра <date_time> , а значение system_end_time_column_name больше значения параметра <date_time> .The value for a row is deemed valid if the system_start_time_column_name value is less than or equal to the <date_time> parameter value and the system_end_time_column_name value is greater than the <date_time> parameter value.

FROM <start_date_time> TO <end_date_time>FROM <start_date_time> TO <end_date_time>

Применимо к: SQL Server 2016 (13.x);SQL Server 2016 (13.x) и выше, а также База данных SQLSQL Database.Applies to: SQL Server 2016 (13.x);SQL Server 2016 (13.x) and later and База данных SQLSQL Database.

Возвращает таблицу, содержащую значения для всех версий записей, которые были активны в течение указанного интервала времени независимо от того, начали ли они быть активными до значения параметра <start_date_time> аргумента FROM или перестали быть активными после значения параметра <end_date_time> аргумента TO.Returns a table with the values for all record versions that were active within the specified time range, regardless of whether they started being active before the <start_date_time> parameter value for the FROM argument or ceased being active after the <end_date_time> parameter value for the TO argument. На внутреннем уровне объединение выполняется между темпоральной таблицей и соответствующей таблицей журнала и результаты отфильтровываются так, чтобы возвращать значения для всех версий строк, которые были активными в течение указанного временного диапазона.Internally, a union is performed between the temporal table and its history table and the results are filtered to return the values for all row versions that were active at any time during the time range specified. В эти строки включаются те, которые стали активными точно в нижнюю границу периода времени, определяемую конечной точкой FROM, и не включаются те, которые стали активными точно в верхнюю границу периода времени, определяемую конечной точкой TO.Rows that became active exactly on the lower boundary defined by the FROM endpoint are included and rows that became active exactly on the upper boundary defined by the TO endpoint are not included.

BETWEEN <start_date_time> AND <end_date_time>BETWEEN <start_date_time> AND <end_date_time>

Применимо к: SQL Server 2016 (13.x);SQL Server 2016 (13.x) и выше, а также База данных SQLSQL Database.Applies to: SQL Server 2016 (13.x);SQL Server 2016 (13.x) and later and База данных SQLSQL Database.

Аналогично приведенному выше описанию для FROM <start_date_time> TO <end_date_time> за исключением того, что таблица возвращаемых строк включает строки, которые стали активными на верхней границе периода времени, определяемой конечной точкой <end_date_time>.Same as above in the FROM <start_date_time> TO <end_date_time> description, except it includes rows that became active on the upper boundary defined by the <end_date_time> endpoint.

CONTAINED IN (<start_date_time> , <end_date_time>)CONTAINED IN (<start_date_time> , <end_date_time>)

Применимо к: SQL Server 2016 (13.x);SQL Server 2016 (13.x) и выше, а также База данных SQLSQL Database.Applies to: SQL Server 2016 (13.x);SQL Server 2016 (13.x) and later and База данных SQLSQL Database.

Возвращает таблицу, содержащую значения для всех версий записей, которые были открыты и закрыты в течение указанного интервала времени, определяемого двумя значениями даты и времени в аргументе CONTAINED IN.Returns a table with the values for all record versions that were opened and closed within the specified time range defined by the two datetime values for the CONTAINED IN argument. В эти строки включаются те, которые стали активными точно в нижнюю границу периода времени, и те, которые перестали быть активными точно в верхнюю границу периода времени.Rows that became active exactly on the lower boundary or ceased being active exactly on the upper boundary are included.

ALLALL
Возвращает таблицу, содержащую значения из всех строк из текущей таблицы и таблицы журнала.Returns a table with the values from all rows from both the current table and the history table.

RemarksRemarks

Предложение FROM поддерживает синтаксис SQL-92-SQL для соединенных и производных таблиц.The FROM clause supports the SQL-92-SQL syntax for joined tables and derived tables. Синтаксис SQL-92 предусматривает операторы соединения INNER, LEFT OUTER, RIGHT OUTER, FULL OUTER и CROSS.SQL-92 syntax provides the INNER, LEFT OUTER, RIGHT OUTER, FULL OUTER, and CROSS join operators.

UNION и JOIN в предложении FROM поддерживаются в представлениях и в производных таблицах и вложенных запросах.UNION and JOIN within a FROM clause are supported within views and in derived tables and subqueries.

Самосоединение — это таблица, соединенная сама с собой.A self-join is a table that is joined to itself. Операции вставки или обновления, основанные на самосоединении, следуют порядку, указанному в предложении FROM.Insert or update operations that are based on a self-join follow the order in the FROM clause.

Так как SQL ServerSQL Server учитывает статистику распределения и количества элементов со связанных серверов, предоставляющих статистику распределения столбцов, то указание в соединении REMOTE не требуется для принудительной удаленной оценки соединения.Because SQL ServerSQL Server considers distribution and cardinality statistics from linked servers that provide column distribution statistics, the REMOTE join hint is not required to force evaluating a join remotely. Обработчик запросов SQL ServerSQL Server учитывает удаленную статистику и определяет, является ли стратегия удаленного соединения подходящей.The SQL ServerSQL Server query processor considers remote statistics and determines whether a remote-join strategy is appropriate. Указание соединения REMOTE удобно для поставщиков, которые не предоставляют статистику распределения столбцов.REMOTE join hint is useful for providers that do not provide column distribution statistics.

Использование оператора APPLYUsing APPLY

Как левый, так и правый операнды оператора APPLY являются табличными выражениями.Both the left and right operands of the APPLY operator are table expressions. Главное различие между этими операндами состоит в том, что right_table_source может использовать функцию с табличным значением, которая принимает столбец из left_table_source в качестве одного из аргументов функции.The main difference between these operands is that the right_table_source can use a table-valued function that takes a column from the left_table_source as one of the arguments of the function. left_table_source может включать функции с табличным значением, но не может содержать аргументы, которые являются столбцами из right_table_source.The left_table_source can include table-valued functions, but it cannot contain arguments that are columns from the right_table_source.

Для предоставления табличного источника для предложения FROM оператор APPLY выполняет следующее:The APPLY operator works in the following way to produce the table source for the FROM clause:

  1. Оценивает right_table_source для каждой строки а left_table_source для создания наборов строк.Evaluates right_table_source against each row of the left_table_source to produce rowsets.

    Значения в right_table_source зависят от left_table_source.The values in the right_table_source depend on left_table_source. right_table_source может быть представлено примерно в следующем виде: TVF(left_table_source.row), где TVF является функцией с табличным значением.right_table_source can be represented approximately this way: TVF(left_table_source.row), where TVF is a table-valued function.

  2. Объединяет результирующие наборы, предоставляемые для каждой строки при оценке right_table_source с left_table_sourceleft_table_source, посредством выполнения операции UNION ALL.Combines the result sets that are produced for each row in the evaluation of right_table_source with the left_table_source by performing a UNION ALL operation.

    Список столбцов, полученный в результате выполнения оператора APPLY, представляет собой набор столбцов из left_table_source, объединенный со списком столбцов из right_table_source.The list of columns produced by the result of the APPLY operator is the set of columns from the left_table_source that is combined with the list of columns from the right_table_source.

Использование операторов PIVOT и UNPIVOTUsing PIVOT and UNPIVOT

Аргументы pivot_column и value_column являются столбцами группирования, используемыми оператором PIVOT.The pivot_column and value_column are grouping columns that are used by the PIVOT operator. Для получения выходного результирующего набора оператор PIVOT выполняет следующее:PIVOT follows the following process to obtain the output result set:

  1. Применяет GROUP BY к input_table к столбцам группирования и предоставляет одну выходную строку для каждой группы.Performs a GROUP BY on its input_table against the grouping columns and produces one output row for each group.

    Столбцы группирования в выходной строке получают соответствующие значения столбцов этой группы в input_table.The grouping columns in the output row obtain the corresponding column values for that group in the input_table.

  2. Формирует значения столбцов в списке столбцов для каждой выходной строки, для чего выполняет следующее:Generates values for the columns in the column list for each output row by performing the following:

    1. Дополнительно группирует строки, созданные в GROUP BY для аргумента pivot_column в предыдущем шаге.Grouping additionally the rows generated in the GROUP BY in the previous step against the pivot_column.

      Для каждого выходного столбца в column_list выбирает подгруппу, которая удовлетворяет следующим условиям:For each output column in the column_list, selecting a subgroup that satisfies the condition:

      pivot_column = CONVERT(<data type of pivot_column>, 'output_column')

    2. aggregate_function вычисляется по отношению к value_column в этой подгруппе, и этот результат возвращается как значение соответствующего output_column.aggregate_function is evaluated against the value_column on this subgroup and its result is returned as the value of the corresponding output_column. Если подгруппа пуста, SQL ServerSQL Server определяет для такого output_column значение NULL.If the subgroup is empty, SQL ServerSQL Server generates a null value for that output_column. Если используется агрегатная функция COUNT, а подгруппа пуста, то возвращается значение (0).If the aggregate function is COUNT and the subgroup is empty, zero (0) is returned.

Примечание

Идентификаторы столбцов в предложении UNPIVOT следуют параметрам сортировки каталога.The column identifiers in the UNPIVOT clause follow the catalog collation. Для База данных SQLSQL Database параметры сортировки всегда соответствуют SQL_Latin1_General_CP1_CI_AS.For База данных SQLSQL Database, the collation is always SQL_Latin1_General_CP1_CI_AS. Для частично автономных баз данных SQL ServerSQL Server параметры сортировки всегда соответствуют Latin1_General_100_CI_AS_KS_WS_SC.For SQL ServerSQL Server partially contained databases, the collation is always Latin1_General_100_CI_AS_KS_WS_SC. Если столбец используется в сочетании с другими столбцами, для предотвращения конфликтов требуется предложение collate (COLLATE DATABASE_DEFAULT).If the column is combined with other columns, then a collate clause (COLLATE DATABASE_DEFAULT) is required to avoid conflicts.

Дополнительные сведения о PIVOT и UNPIVOT, включая примеры, см. в разделе Использование операторов PIVOT и UNPIVOT.For more information about PIVOT and UNPIVOT including examples, see Using PIVOT and UNPIVOT.

РазрешенияPermissions

Требует разрешения для инструкции DELETE, SELECT или UPDATE.Requires the permissions for the DELETE, SELECT, or UPDATE statement.

ПримерыExamples

A.A. Использование простого предложения FROMUsing a simple FROM clause

В следующем примере извлекаются столбцы TerritoryID и Name из таблицы SalesTerritory в образце базы данных AdventureWorks2012AdventureWorks2012.The following example retrieves the TerritoryID and Name columns from the SalesTerritory table in the AdventureWorks2012AdventureWorks2012 sample database.

SELECT TerritoryID, Name  
FROM Sales.SalesTerritory  
ORDER BY TerritoryID ;  

Результирующий набор:Here is the result set.

TerritoryID Name                            
----------- ------------------------------  
1           Northwest                       
2           Northeast                       
3           Central                         
4           Southwest                       
5           Southeast                       
6           Canada                          
7           France                          
8           Germany                         
9           Australia                       
10          United Kingdom                  
(10 row(s) affected)  

Б.B. Использование подсказок оптимизатора TABLOCK и HOLDLOCKUsing the TABLOCK and HOLDLOCK optimizer hints

Следующая частичная транзакция показывает, как явно указать совмещаемую блокировку на таблицу Employee и как прочитать индекс.The following partial transaction shows how to place an explicit shared table lock on Employee and how to read the index. Блокировка удерживается на протяжении всей транзакции.The lock is held throughout the whole transaction.

BEGIN TRAN  
SELECT COUNT(*)   
FROM HumanResources.Employee WITH (TABLOCK, HOLDLOCK) ;  

В.C. Использование синтаксиса SQL-92 для CROSS JOINUsing the SQL-92 CROSS JOIN syntax

В следующем примере возвращается векторное произведение двух таблиц Employee и Department в базе данных AdventureWorks2012AdventureWorks2012.The following example returns the cross product of the two tables Employee and Department in the AdventureWorks2012AdventureWorks2012 database. Возвращается список всех возможных сочетаний строк BusinessEntityID и все строки имен Department.A list of all possible combinations of BusinessEntityID rows and all Department name rows are returned.

SELECT e.BusinessEntityID, d.Name AS Department  
FROM HumanResources.Employee AS e  
CROSS JOIN HumanResources.Department AS d  
ORDER BY e.BusinessEntityID, d.Name ;  

Г.D. Использование синтаксиса SQL-92 для FULL OUTER JOINUsing the SQL-92 FULL OUTER JOIN syntax

В следующем примере возвращается название продукта и любые соответствующие заказы на продажу в таблице SalesOrderDetail в базе данных AdventureWorks2012AdventureWorks2012.The following example returns the product name and any corresponding sales orders in the SalesOrderDetail table in the AdventureWorks2012AdventureWorks2012 database. В примере также возвращаются все заказы на продажу, продукты для которых не представлены в таблице Product, и все продукты с заказом на продажу, отличные от тех, которые представлены в таблице Product.It also returns any sales orders that have no product listed in the Product table, and any products with a sales order other than the one listed in the Product table.

-- The OUTER keyword following the FULL keyword is optional.  
SELECT p.Name, sod.SalesOrderID  
FROM Production.Product AS p  
FULL OUTER JOIN Sales.SalesOrderDetail AS sod  
ON p.ProductID = sod.ProductID  
ORDER BY p.Name ;  

Д.E. Использование синтаксиса SQL-92 для LEFT OUTER JOINUsing the SQL-92 LEFT OUTER JOIN syntax

Следующий пример соединяет две таблицы по столбцу ProductID и сохраняет несовпадающие строки из левой таблицы.The following example joins two tables on ProductID and preserves the unmatched rows from the left table. Таблица Product сопоставляется с таблицей SalesOrderDetail по столбцам ProductID в каждой таблице.The Product table is matched with the SalesOrderDetail table on the ProductID columns in each table. В результирующем наборе отражаются все продукты (как входящие в заказы, так и не входящие).All products, ordered and not ordered, appear in the result set.

SELECT p.Name, sod.SalesOrderID  
FROM Production.Product AS p  
LEFT OUTER JOIN Sales.SalesOrderDetail AS sod  
ON p.ProductID = sod.ProductID  
ORDER BY p.Name ;  

Е.F. Использование синтаксиса SQL-92 для INNER JOINUsing the SQL-92 INNER JOIN syntax

Следующий пример возвращает все названия продуктов и идентификаторы заказов.The following example returns all product names and sales order IDs.

-- By default, SQL Server performs an INNER JOIN if only the JOIN   
-- keyword is specified.  
SELECT p.Name, sod.SalesOrderID  
FROM Production.Product AS p  
INNER JOIN Sales.SalesOrderDetail AS sod  
ON p.ProductID = sod.ProductID  
ORDER BY p.Name ;  

Ж.G. Использование синтаксиса SQL-92 для RIGHT OUTER JOINUsing the SQL-92 RIGHT OUTER JOIN syntax

Следующий пример соединяет две таблицы по столбцу TerritoryID и сохраняет несовпадающие строки из правой таблицы.The following example joins two tables on TerritoryID and preserves the unmatched rows from the right table. Таблица SalesTerritory сопоставляется с таблицей SalesPerson по столбцу TerritoryID каждой таблицы.The SalesTerritory table is matched with the SalesPerson table on the TerritoryID column in each table. В результирующем наборе отображаются все представители отдела продаж независимо от того, назначена им обслуживаемая территория или нет.All salespersons appear in the result set, whether or not they are assigned a territory.

SELECT st.Name AS Territory, sp.BusinessEntityID  
FROM Sales.SalesTerritory AS st   
RIGHT OUTER JOIN Sales.SalesPerson AS sp  
ON st.TerritoryID = sp.TerritoryID ;  

З.H. Использование подсказок соединения HASH и MERGEUsing HASH and MERGE join hints

Следующий пример выполняет соединение трех таблиц — Product, ProductVendor и Vendor — для формирования списка продуктов и их поставщиков.The following example performs a three-table join among the Product, ProductVendor, and Vendor tables to produce a list of products and their vendors. Оптимизатор запросов соединяет таблицы Product и ProductVendor (p и pv) с помощью соединения слиянием (MERGE).The query optimizer joins Product and ProductVendor (p and pv) by using a MERGE join. Затем результаты соединения слиянием таблиц Product и ProductVendor (p и pv) соединяются при помощи HASH в таблицу Vendor для формирования (p и pv) и v.Next, the results of the Product and ProductVendor MERGE join (p and pv) are HASH joined to the Vendor table to produce (p and pv) and v.

Важно!

После того как задано указание соединения, ключевое слово INNER более не является необязательным и должно быть задано в явном виде для выполнения INNER JOIN.After a join hint is specified, the INNER keyword is no longer optional and must be explicitly stated for an INNER JOIN to be performed.

SELECT p.Name AS ProductName, v.Name AS VendorName  
FROM Production.Product AS p   
INNER MERGE JOIN Purchasing.ProductVendor AS pv   
ON p.ProductID = pv.ProductID  
INNER HASH JOIN Purchasing.Vendor AS v  
ON pv.BusinessEntityID = v.BusinessEntityID  
ORDER BY p.Name, v.Name ;  

И.I. Использование производной таблицыUsing a derived table

Следующий пример использует производную таблицу, инструкцию SELECT после предложения FROM, для возврата имен и фамилий сотрудников и городов, в которых они проживают.The following example uses a derived table, a SELECT statement after the FROM clause, to return the first and last names of all employees and the cities in which they live.

SELECT RTRIM(p.FirstName) + ' ' + LTRIM(p.LastName) AS Name, d.City  
FROM Person.Person AS p  
INNER JOIN HumanResources.Employee e ON p.BusinessEntityID = e.BusinessEntityID   
INNER JOIN  
   (SELECT bea.BusinessEntityID, a.City   
    FROM Person.Address AS a  
    INNER JOIN Person.BusinessEntityAddress AS bea  
    ON a.AddressID = bea.AddressID) AS d  
ON p.BusinessEntityID = d.BusinessEntityID  
ORDER BY p.LastName, p.FirstName;  

К.J. Использование TABLESAMPLE для чтения данных из выборки строк в таблицеUsing TABLESAMPLE to read data from a sample of rows in a table

В следующем примере используется TABLESAMPLE в предложении FROM для возврата около 10 процентов всех строк из таблицы Customer.The following example uses TABLESAMPLE in the FROM clause to return approximately 10 percent of all the rows in the Customer table.

SELECT *  
FROM Sales.Customer TABLESAMPLE SYSTEM (10 PERCENT) ;  

Л.K. Использование оператора APPLYUsing APPLY

Следующий пример предполагает, что в базе данных существуют следующие таблицы и функция с табличным значением:The following example assumes that the following tables and table-valued function exist in the database:

Имени объектаObject Name Имена столбцовColumn Names
DepartmentsDepartments DeptID, DivisionID, DeptName, DeptMgrIDDeptID, DivisionID, DeptName, DeptMgrID
EmpMgrEmpMgr MgrID, EmpIDMgrID, EmpID
EmployeesEmployees EmpID, EmpLastName, EmpFirstName, EmpSalaryEmpID, EmpLastName, EmpFirstName, EmpSalary
GetReports(MgrID)GetReports(MgrID) EmpID, EmpLastName, EmpSalaryEmpID, EmpLastName, EmpSalary

Функция с табличным значением GetReports возвращает список всех сотрудников, которые находятся в прямом или косвенном подчинении указанного менеджера MgrID.The GetReports table-valued function, returns the list of all employees that report directly or indirectly to the specified MgrID.

В этом примере используется APPLY для возврата всех отделов и всех сотрудников этих отделов.The example uses APPLY to return all departments and all employees in that department. Если в каком-либо отделе нет сотрудников, для этого отдела не будет возвращено никаких строк.If a particular department does not have any employees, there will not be any rows returned for that department.

SELECT DeptID, DeptName, DeptMgrID, EmpID, EmpLastName, EmpSalary  
FROM Departments d    
CROSS APPLY dbo.GetReports(d.DeptMgrID) ;  

Если необходимо, чтобы запрос предоставил строки для тех отделов без сотрудников, в которых будут выданы значения NULL для столбцов EmpID, EmpLastName и EmpSalary, нужно вместо APPLY применить OUTER APPLY.If you want the query to produce rows for those departments without employees, which will produce null values for the EmpID, EmpLastName and EmpSalary columns, use OUTER APPLY instead.

SELECT DeptID, DeptName, DeptMgrID, EmpID, EmpLastName, EmpSalary  
FROM Departments d   
OUTER APPLY dbo.GetReports(d.DeptMgrID) ;  

М.L. Использование CROSS APPLYUsing CROSS APPLY

В следующем примере показано получение моментального снимка всех планов запросов, находящихся в кэше планов, путем получения дескрипторов планов для всех планов запросов в кэше запросом динамического административного представления sys.dm_exec_cached_plans.The following example retrieves a snapshot of all query plans residing in the plan cache, by querying the sys.dm_exec_cached_plans dynamic management view to retrieve the plan handles of all query plans in the cache. Затем оператор CROSS APPLY передает дескрипторы планов в sys.dm_exec_query_plan.Then the CROSS APPLY operator is specified to pass the plan handles to sys.dm_exec_query_plan. Вывод инструкции Showplan в формате XML для каждого плана, находящегося в кэше планов, находится в столбце query_plan возвращаемой таблицы.The XML Showplan output for each plan currently in the plan cache is in the query_plan column of the table that is returned.

USE master;  
GO  
SELECT dbid, object_id, query_plan   
FROM sys.dm_exec_cached_plans AS cp   
CROSS APPLY sys.dm_exec_query_plan(cp.plan_handle);   
GO  

Н.M. Использование FOR SYSTEM_TIMEUsing FOR SYSTEM_TIME

Применимо к: SQL Server 2016 (13.x);SQL Server 2016 (13.x) и выше, а также База данных SQLSQL Database.Applies to: SQL Server 2016 (13.x);SQL Server 2016 (13.x) and later and База данных SQLSQL Database.

В следующем примере используется аргумент SYSTEM_TIME AS OF date_time_literal_or_variable для возврата строк таблицы, которые были актуальны по состоянию на 1 января 2014 г.The following example uses the FOR SYSTEM_TIME AS OF date_time_literal_or_variable argument to return table rows that were actual (current) as of January 1, 2014.

SELECT DepartmentNumber,   
    DepartmentName,   
    ManagerID,   
    ParentDepartmentNumber   
FROM DEPARTMENT  
FOR SYSTEM_TIME AS OF '2014-01-01'  
WHERE ManagerID = 5;

В следующем примере используется аргумент SYSTEM_TIME FROM date_time_literal_or_variable TO date_time_literal_or_variable для возврата всех строк, которые были активны в течение периода с 1 января 2013 г. по 1 января 2014 г., исключая верхнее значение.The following example uses the FOR SYSTEM_TIME FROM date_time_literal_or_variable TO date_time_literal_or_variable argument to return all rows that were active during the period defined as starting with January 1, 2013 and ending with January 1, 2014, exclusive of the upper boundary.

SELECT DepartmentNumber,   
    DepartmentName,   
    ManagerID,   
    ParentDepartmentNumber   
FROM DEPARTMENT  
FOR SYSTEM_TIME FROM '2013-01-01' TO '2014-01-01'  
WHERE ManagerID = 5;

В следующем примере используется аргумент SSYSTEM_TIME BETWEEN date_time_literal_or_variable AND date_time_literal_or_variabl для возврата всех строк, которые были активны в течение периода с 1 января 2013 г. по 1 января 2014 г., включая верхнее значение.The following example uses the FOR SYSTEM_TIME BETWEEN date_time_literal_or_variable AND date_time_literal_or_variable argument to return all rows that were active during the period defined as starting with January 1, 2013 and ending with January 1, 2014, inclusive of the upper boundary.

SELECT DepartmentNumber,   
    DepartmentName,   
    ManagerID,   
    ParentDepartmentNumber   
FROM DEPARTMENT  
FOR SYSTEM_TIME BETWEEN '2013-01-01' AND '2014-01-01'  
WHERE ManagerID = 5;

В следующем примере используется аргумент SYSTEM_TIME CONTAINED IN (date_time_literal_or_variable, date_time_literal_or_variable) для возврата всех строк, которые были открыты и закрыты в течение периода с 1 января 2013 г. по 1 января 2014 г.The following example uses the FOR SYSTEM_TIME CONTAINED IN ( date_time_literal_or_variable, date_time_literal_or_variable ) argument to return all rows that were opened and closed during the period defined as starting with January 1, 2013 and ending with January 1, 2014.

SELECT DepartmentNumber,   
    DepartmentName,   
    ManagerID,   
    ParentDepartmentNumber   
FROM DEPARTMENT  
FOR SYSTEM_TIME CONTAINED IN ( '2013-01-01', '2014-01-01' )  
WHERE ManagerID = 5;

В следующем примере для предоставления граничных значений даты для запроса используется переменная, а не литерал.The following example uses a variable rather than a literal to provide the date boundary values for the query.

DECLARE @AsOfFrom datetime2 = dateadd(month,-12, sysutcdatetime());
DECLARE @AsOfTo datetime2 = dateadd(month,-6, sysutcdatetime());
  
SELECT DepartmentNumber,   
    DepartmentName,   
    ManagerID,   
    ParentDepartmentNumber   
FROM DEPARTMENT  
FOR SYSTEM_TIME FROM @AsOfFrom TO @AsOfTo  
WHERE ManagerID = 5;

Примеры: Azure Synapse Analytics (Хранилище данных SQL)Azure Synapse Analytics (SQL Data Warehouse) и Параллельное хранилище данныхParallel Data WarehouseExamples: Azure Synapse Analytics (Хранилище данных SQL)Azure Synapse Analytics (SQL Data Warehouse) and Параллельное хранилище данныхParallel Data Warehouse

О.N. Использование синтаксиса INNER JOINUsing the INNER JOIN syntax

В следующем примере возвращаются столбцы SalesOrderNumber, ProductKey и EnglishProductName из таблиц FactInternetSales и DimProduct с одинаковым ключом соединения ProductKey в обеих таблицах.The following example returns the SalesOrderNumber, ProductKey, and EnglishProductName columns from the FactInternetSales and DimProduct tables where the join key, ProductKey, matches in both tables. Каждый столбец SalesOrderNumber и EnglishProductName существует только в одной из таблиц, поэтому не нужно указывать псевдоним таблицы с этими столбцами, как показано. Эти псевдонимы приводятся исключительно для удобства чтения.The SalesOrderNumber and EnglishProductName columns each exist in one of the tables only, so it is not necessary to specify the table alias with these columns, as is shown; these aliases are included for readability. Слово AS перед именем псевдонима не является обязательным, но рекомендуется для удобства чтения и соответствия стандарту ANSI.The word AS before an alias name is not required but is recommended for readability and to conform to the ANSI standard.

-- Uses AdventureWorks  
  
SELECT fis.SalesOrderNumber, dp.ProductKey, dp.EnglishProductName  
FROM FactInternetSales AS fis 
INNER JOIN DimProduct AS dp  
    ON dp.ProductKey = fis.ProductKey;  

Поскольку для внутренних соединений не требуется ключевое слово INNER, этот же запрос можно записать так:Since the INNER keyword is not required for inner joins, this same query could be written as:

-- Uses AdventureWorks  
  
SELECT fis.SalesOrderNumber, dp.ProductKey, dp.EnglishProductName  
FROM FactInternetSales AS fis 
JOIN DimProduct AS dp  
ON dp.ProductKey = fis.ProductKey;  

Для ограничения результатов в этом запросе также можно использовать предложение WHERE.A WHERE clause could also be used with this query to limit results. В этом примере результаты ограничиваются SalesOrderNumber значениями, выше чем "SO5000":This example limits results to SalesOrderNumber values higher than 'SO5000':

-- Uses AdventureWorks  
  
SELECT fis.SalesOrderNumber, dp.ProductKey, dp.EnglishProductName  
FROM FactInternetSales AS fis 
JOIN DimProduct AS dp  
    ON dp.ProductKey = fis.ProductKey  
WHERE fis.SalesOrderNumber > 'SO50000'  
ORDER BY fis.SalesOrderNumber;  

П.O. Использование синтаксиса LEFT OUTER JOIN и RIGHT OUTER JOINUsing the LEFT OUTER JOIN and RIGHT OUTER JOIN syntax

В следующем примере соединяются таблицы FactInternetSales и DimProduct по столбцам ProductKey.The following example joins the FactInternetSales and DimProduct tables on the ProductKey columns. Синтаксис левого внешнего соединения сохраняет несовпадающие строки из левой (FactInternetSales) таблицы.The left outer join syntax preserves the unmatched rows from the left (FactInternetSales) table. Поскольку таблица FactInternetSales не содержит значения ProductKey, которые не соответствуют значениям в таблице DimProduct, этот запрос возвращает те же строки, что и в первом примере внутреннего соединения выше.Since the FactInternetSales table does not contain any ProductKey values that do not match the DimProduct table, this query returns the same rows as the first inner join example above.

-- Uses AdventureWorks  
  
SELECT fis.SalesOrderNumber, dp.ProductKey, dp.EnglishProductName  
FROM FactInternetSales AS fis 
LEFT OUTER JOIN DimProduct AS dp  
    ON dp.ProductKey = fis.ProductKey;  

Этот запрос можно написать без ключевого слова OUTER.This query could also be written without the OUTER keyword.

В правых внешних соединениях сохраняются несовпадающие строки из правой таблицы.In right outer joins, the unmatched rows from the right table are preserved. В следующем примере возвращаются те же строки, что и в приведенном выше примере левого внешнего соединения.The following example returns the same rows as the left outer join example above.

-- Uses AdventureWorks  
  
SELECT fis.SalesOrderNumber, dp.ProductKey, dp.EnglishProductName  
FROM DimProduct AS dp 
RIGHT OUTER JOIN FactInternetSales AS fis  
    ON dp.ProductKey = fis.ProductKey;  

Следующий запрос использует таблицу DimSalesTerritory в качестве левой таблицы в левом внешнем соединении.The following query uses the DimSalesTerritory table as the left table in a left outer join. Он извлекает значения SalesOrderNumber из таблицы FactInternetSales.It retrieves the SalesOrderNumber values from the FactInternetSales table. Если заказы по конкретному SalesTerritoryKey отсутствуют, запрос вернет значение NULL для SalesOrderNumber для этой строки.If there are no orders for a particular SalesTerritoryKey, the query will return a NULL for the SalesOrderNumber for that row. Этот запрос упорядочен по столбцу SalesOrderNumber, чтобы все значения NULL в этом столбце отображались в верхней части результатов.This query is ordered by the SalesOrderNumber column, so that any NULLs in this column will appear at the top of the results.

-- Uses AdventureWorks  
  
SELECT dst.SalesTerritoryKey, dst.SalesTerritoryRegion, fis.SalesOrderNumber  
FROM DimSalesTerritory AS dst 
LEFT OUTER JOIN FactInternetSales AS fis  
    ON dst.SalesTerritoryKey = fis.SalesTerritoryKey  
ORDER BY fis.SalesOrderNumber;  

Этот запрос можно переписать с правым внешним соединением, чтобы получать те же результаты:This query could be rewritten with a right outer join to retrieve the same results:

-- Uses AdventureWorks  
  
SELECT dst.SalesTerritoryKey, dst.SalesTerritoryRegion, fis.SalesOrderNumber  
FROM FactInternetSales AS fis 
RIGHT OUTER JOIN DimSalesTerritory AS dst  
    ON fis.SalesTerritoryKey = dst.SalesTerritoryKey  
ORDER BY fis.SalesOrderNumber;  

Т.P. Использование синтаксиса FULL OUTER JOINUsing the FULL OUTER JOIN syntax

В следующем примере показано полное внешнее соединение, которое возвращает все строки из обеих соединенных таблиц, но возвращает NULL для значений, которые не соответствуют значениям из другой таблицы.The following example demonstrates a full outer join, which returns all rows from both joined tables but returns NULL for values that do not match from the other table.

-- Uses AdventureWorks  
  
SELECT dst.SalesTerritoryKey, dst.SalesTerritoryRegion, fis.SalesOrderNumber  
FROM DimSalesTerritory AS dst 
FULL OUTER JOIN FactInternetSales AS fis  
    ON dst.SalesTerritoryKey = fis.SalesTerritoryKey  
ORDER BY fis.SalesOrderNumber;  

Этот запрос можно написать без ключевого слова OUTER.This query could also be written without the OUTER keyword.

-- Uses AdventureWorks  
  
SELECT dst.SalesTerritoryKey, dst.SalesTerritoryRegion, fis.SalesOrderNumber  
FROM DimSalesTerritory AS dst 
FULL JOIN FactInternetSales AS fis  
    ON dst.SalesTerritoryKey = fis.SalesTerritoryKey  
ORDER BY fis.SalesOrderNumber;  

У.Q. Использование синтаксиса CROSS JOINUsing the CROSS JOIN syntax

В следующем примере возвращается векторное произведение двух таблиц FactInternetSales и DimSalesTerritory.The following example returns the cross-product of the FactInternetSales and DimSalesTerritory tables. Возвращается список всех возможных сочетаний SalesOrderNumber и SalesTerritoryKey.A list of all possible combinations of SalesOrderNumber and SalesTerritoryKey are returned. Обратите внимание на отсутствие предложения ON в запросе перекрестного соединения.Notice the absence of the ON clause in the cross join query.

-- Uses AdventureWorks  
  
SELECT dst.SalesTerritoryKey, fis.SalesOrderNumber  
FROM DimSalesTerritory AS dst 
CROSS JOIN FactInternetSales AS fis  
ORDER BY fis.SalesOrderNumber;  

Ф.R. Использование производной таблицыUsing a derived table

В следующем примере используется производная таблица (инструкция SELECTпосле предложения FROM) для возврата столбцов CustomerKey и LastName всех клиентов в таблице DimCustomer со значениями BirthDate позже 1 января 1970 г. и фамилией Smith.The following example uses a derived table (a SELECT statement after the FROM clause) to return the CustomerKey and LastName columns of all customers in the DimCustomer table with BirthDate values later than January 1, 1970 and the last name 'Smith'.

-- Uses AdventureWorks  
  
SELECT CustomerKey, LastName  
FROM  
   (SELECT * FROM DimCustomer  
    WHERE BirthDate > '01/01/1970') AS DimCustomerDerivedTable  
WHERE LastName = 'Smith'  
ORDER BY LastName;  

Х.S. Пример указания соединения REDUCEREDUCE join hint example

В следующем примере используется указание соединения REDUCE для изменения обработки производной таблицы в запросе.The following example uses the REDUCE join hint to alter the processing of the derived table within the query. При использовании указания соединения REDUCE в этом запросе выполняется проецирование, репликация и разделение fis.ProductKey и последующее соединение с DimProduct во время случайного перемещения DimProduct в ProductKey.When using the REDUCE join hint in this query, the fis.ProductKey is projected, replicated and made distinct, and then joined to DimProduct during the shuffle of DimProduct on ProductKey. Результирующая производная таблица распространяется на fis.ProductKey.The resulting derived table is distributed on fis.ProductKey.

-- Uses AdventureWorks  
  
EXPLAIN SELECT SalesOrderNumber  
FROM  
   (SELECT fis.SalesOrderNumber, dp.ProductKey, dp.EnglishProductName  
    FROM DimProduct AS dp   
      INNER REDUCE JOIN FactInternetSales AS fis   
          ON dp.ProductKey = fis.ProductKey  
   ) AS dTable  
ORDER BY SalesOrderNumber;  

T.T. Пример указания соединения REPLICATEREPLICATE join hint example

В следующем примере показан тот же запрос, что и в предыдущем примере, за исключением того, что вместо указания соединения REDUCE используется указание соединения REPLICATE.This next example shows the same query as the previous example, except that a REPLICATE join hint is used instead of the REDUCE join hint. Использование указания REPLICATE приводит к репликации значений в столбце соединения ProductKey из таблицы FactInternetSalesна всех узлах.Use of the REPLICATE hint causes the values in the ProductKey (joining) column from the FactInternetSales table to be replicated to all nodes. Таблица DimProduct соединяется с реплицированной версией этих значений.The DimProduct table is joined to the replicated version of those values.

-- Uses AdventureWorks  
  
EXPLAIN SELECT SalesOrderNumber  
FROM  
   (SELECT fis.SalesOrderNumber, dp.ProductKey, dp.EnglishProductName  
    FROM DimProduct AS dp   
      INNER REPLICATE JOIN FactInternetSales AS fis  
          ON dp.ProductKey = fis.ProductKey  
   ) AS dTable  
ORDER BY SalesOrderNumber;  

Ф.U. Использование указания REDISTRIBUTE для перемещения в случайном порядке для соединения несовместимого распределенияUsing the REDISTRIBUTE hint to guarantee a Shuffle move for a distribution incompatible join

В следующем запросе используется указание запроса REDISTRIBUTE в соединении несовместимого распределения.The following query uses the REDISTRIBUTE query hint on a distribution incompatible join. Это гарантирует, что оптимизатор запросов будет использовать в плане запроса перемещение в случайном порядке.This guarantees the query optimizer will use a Shuffle move in the query plan. Кроме того, план запроса не будет использовать широковещательное перемещение, при котором распределенная таблица переносится в реплицированную таблицу.This also guarantees the query plan will not use a Broadcast move which moves a distributed table to a replicated table.

В следующем примере указание REDISTRIBUTE принудительно вызывает перемещение в случайном порядке в таблице FactInternetSales, поскольку ProductKey является столбцом распределения для DimProduct и не является столбцом распределения для FactInternetSales.In the following example, the REDISTRIBUTE hint forces a Shuffle move on the FactInternetSales table because ProductKey is the distribution column for DimProduct, and is not the distribution column for FactInternetSales.

-- Uses AdventureWorks  
  
EXPLAIN  
SELECT dp.ProductKey, fis.SalesOrderNumber, fis.TotalProductCost  
FROM DimProduct AS dp 
INNER REDISTRIBUTE JOIN FactInternetSales AS fis  
    ON dp.ProductKey = fis.ProductKey;  

V.V. Использование TABLESAMPLE для чтения данных из выборки строк в таблицеUsing TABLESAMPLE to read data from a sample of rows in a table

В следующем примере используется TABLESAMPLE в предложении FROM для возврата около 10 процентов всех строк из таблицы Customer.The following example uses TABLESAMPLE in the FROM clause to return approximately 10 percent of all the rows in the Customer table.

SELECT *  
FROM Sales.Customer TABLESAMPLE SYSTEM (10 PERCENT) ;

См. также:See Also

CONTAINSTABLE (Transact-SQL) CONTAINSTABLE (Transact-SQL)
FREETEXTTABLE (Transact-SQL) FREETEXTTABLE (Transact-SQL)
INSERT (Transact-SQL) INSERT (Transact-SQL)
OPENQUERY (Transact-SQL) OPENQUERY (Transact-SQL)
OPENROWSET (Transact-SQL) OPENROWSET (Transact-SQL)
Операторы (Transact-SQL) Operators (Transact-SQL)
WHERE (Transact-SQL)WHERE (Transact-SQL)