SELECT (Transact-SQL)

Возвращает строки из базы данных и позволяет делать выборку одной или нескольких строк или столбцов из одной или нескольких таблиц в SQL Server 2008 R2. Полный синтаксис инструкции 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. Согласно этому порядку предложения последующих стадий получают доступ к объектам, определенным на предыдущей стадии. Например, если обработчик запросов может привязываться (обращаться) к таблицам или представлениям, определенным в предложении FROM, то эти объекты и их столбцы становятся доступны для всех последующих стадий.  С другой стороны, поскольку стадия предложения SELECT — 8, то любые псевдонимы столбцов или производные столбцы, определенные в этом предложении, не могут упоминаться в предыдущих предложениях. Однако они могут упоминаться в последующих предложениях, например в предложении ORDER BY. Обратите внимание, что фактическое физическое выполнение предложения определяется обработчиком запросов и фактический порядок выполнения может отличаться от порядка в данном списке.

  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

Разрешения

Для выборки данных требуется разрешение SELECT на таблицу или представление, которое может быть унаследовано из области более высокого уровня, например разрешение SELECT на схему или разрешение CONTROL на таблицу. Может также потребоваться членство в предопределенной роли базы данных db_datareader или db_owner либо в предопределенной роли сервера sysadmin. Для создания новой таблицы инструкцией SELECTINTO также необходимы разрешения CREATETABLE и ALTERSCHEMA на схему, которой принадлежит новая таблица.