SELECT (Transact-SQL)

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

[ WITH <common_table_expression>]

SELECT select_list [ INTO new_table ]

[ FROM table_source ] [ WHERE search_condition ]

[ GROUP BY group_by_expression ]

[ HAVING search_condition ]

[ ORDER BY order_expression [ ASC | DESC ] ]

Операторы UNION, EXCEPT и INTERSECT можно использовать между запросами, чтобы сравнить их результаты или объединить в один результирующий набор.

Значок ссылки на разделСоглашение о синтаксисе в Transact-SQL

Синтаксис

<SELECT statement> ::=  
    [WITH <common_table_expression> [,...n]]
    <query_expression> 
    [ ORDER BY { order_by_expression | column_position [ ASC | DESC ] } 
  [ ,...n ] ] 
    [ COMPUTE 
  { { AVG | COUNT | MAX | MIN | SUM } (expression )} [ ,...n ] 
  [ BY expression [ ,...n ] ] 
    ] 
    [ <FOR Clause>] 
    [ OPTION ( <query_hint> [ ,...n ] ) ] 
<query_expression> ::= 
    { <query_specification> | ( <query_expression> ) } 
    [  { UNION [ ALL ] | EXCEPT | INTERSECT }
        <query_specification> | ( <query_expression> ) [...n ] ] 
<query_specification> ::= 
SELECT [ ALL | DISTINCT ] 
    [TOP ( expression ) [PERCENT] [ WITH TIES ] ] 
    < select_list > 
    [ INTO new_table ] 
    [ FROM { <table_source> } [ ,...n ] ] 
    [ WHERE <search_condition> ] 
    [ <GROUP BY> ] 
    [ HAVING < search_condition > ] 

Замечания

Учитывая сложность инструкции SELECT, элементы ее синтаксиса и аргументы подробно представлены в предложении:

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

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

Четырехкомпонентное имя, составленное с помощью функции OPENDATASOURCE как части server-name, может быть использовано в качестве исходной таблицы в любом месте инструкции SELECT, где может появляться имя таблицы.

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

Порядок обработки инструкции SELECT

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

  1. FROM

  2. ON

  3. JOIN

  4. WHERE

  5. GROUP BY

  6. WITH CUBE или WITH ROLLUP

  7. HAVING

  8. SELECT

  9. DISTINCT

  10. ORDER BY

  11. TOP

Разрешения

Требуется членство в предопределенной роли сервера sysadmin, предопределенных ролях базы данных db_owner и db_datareader, а также владение таблицей. Члены ролей sysadmin, db_owner и db_securityadmin, а также владелец таблицы может передавать разрешения другим пользователям.