Выражение SELECT (Transact-SQL)

Определяет столбцы, возвращаемые запросом.

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

Синтаксис

SELECT [ ALL | DISTINCT ]
[ TOP expression [ PERCENT ] [ WITH TIES ] ] 
<select_list> 
<select_list> ::= 
    { 
      | { table_name | view_name | table_alias }.* 
      | {
          [ { table_name | view_name | table_alias }. ]
               { column_name | $IDENTITY | $ROWGUID } 
          | udt_column_name [ { . | :: } { { property_name | field_name } 
            | method_name ( argument [ ,...n] ) } ]
          | expression
          [ [ AS ] column_alias ] 
         }
      | column_alias = expression 
    } [ ,...n ] 

Аргументы

  • ALL
    Указывает на то, что в результирующем наборе могут появляться дублирующиеся строки. ALL применяется по умолчанию.
  • DISTINCT
    Указывает на то, что уникальные строки могут появляться в результирующем наборе. Пустые значения считаются равными при использовании ключевого слова DISTINCT.
  • TOP expression [ PERCENT ] [ WITH TIES ]
    Указывает на то, что только заданное число или процент строк будет возвращен из результирующего набора запроса. Аргумент expression может быть либо числом, либо процентом строк.

    Предложение TOP может быть использовано в инструкциях SELECT, INSERT, UPDATE и DELETE. Разделение круглыми скобками в expression параметра TOP требуется в операторах INSERT, UPDATE и DELETE. В целях обратной совместимости использование TOP expression без скобок в инструкции SELECT поддерживается, но не рекомендуется к использованию. Дополнительные сведения см. в разделе TOP (Transact-SQL).

  • < select_list >
    Столбцы, выбираемые в результирующий набор. Список выбора представляет собой серию выражений, отделяемых запятыми. Максимальное число выражений, которое можно задать в списке выбора — 4 096.
  • *
    Указывает на то, что все столбцы из всех таблиц и представлений в предложении FROM должны быть возвращены. Столбцы возвращаются таблицей или представлением, как указано в предложении FROM, и в порядке, в котором они находятся в таблице или представлении.
  • table_ name| view_ name| table_ alias.*
    Ограничивает область * до указанной таблицы или представления.
  • column_ name
    Имя возвращаемого столбца. Указывайте квалификатор для аргумента column_name в целях избежания неоднозначности ссылок, которые могут возникнуть, если в двух таблицах из предложения FROM содержатся столбцы с одинаковыми именами. Например таблицы SalesOrderHeader и SalesOrderDetail в базе данных AdventureWorks содержат столбцы с именем ModifiedDate. Если в запросе соединяются две таблицы, то данные о дате изменения из таблицы SalesOrderDetail могут быть заданы в списке выбора как SalesOrderDetail.ModifiedDate.
  • expression
    Является константой, функцией, любым сочетанием имен столбцов, констант и функций, соединенных оператором (операторами) или вложенным запросом.
  • $IDENTITY
    Возвращает столбец идентификатора. Дополнительные сведения см. в разделах IDENTITY (свойство) (Transact-SQL), ALTER TABLE (Transact-SQL) и CREATE TABLE (Transact-SQL).

    Если более чем одна таблица из предложения FROM содержит столбец со свойством IDENTITY, $IDENTITY должно быть задано с определенным именем таблицы, например T1.$IDENTITY.

  • $ROWGUID
    Возвращает GUID столбец строки.

    Если более чем одна таблица из предложения FROM содержит столбец со свойством ROWGUIDCOL, $ROWGUIDCOL должно быть задано с определенным именем таблицы, например T1.$IDENTITY.

  • udt_column_name
    Имя возвращаемого пользовательского типа общеязыковой среды исполнения (CLR) столбца.

    ms176104.note(ru-ru,SQL.90).gifПримечание.
    Среда SQL Server Management Studio возвращает значения пользовательского типа в двоичном представлении. Чтобы вернуть значения пользовательского типа в виде строки или в формате XML, используйте CAST или CONVERT.
  • { . | :: }
    Указывает метод, свойство или поле пользовательского типа CLR. Используйте . для (нестатического) метода экземпляра класса, свойства или поля. Используйте :: для статического метода, свойства или поля. Для обращения к методу, свойству или полю пользовательского типа CLR необходимо разрешение EXECUTE для этого типа.
  • property_name
    Общее свойство udt_column_name.
  • field_name
    Общий член данных udt_column_name.
  • method_name
    Общий метод udt_column_name, который принимает один или более аргументов. Метод method_name не может быть методом-мутатором.

    В следующем примере выбираются значения столбца Location, определенного типом point, из таблицы Cities путем обращения к методу типа, названного Distance:

    CREATE TABLE Cities (
         Name varchar(20),
         State varchar(20),
         Location point );
    GO
    DECLARE @p point (32, 23), @distance float
    GO
    SELECT Location.Distance (@p)
    FROM Cities;
    
  • column_ alias
    Альтернативное имя, которым можно заменить имя столбца в результирующем наборе запроса. Например, такой псевдоним, как Quantity, Quantity to Date или Qty, может быть задан для столбца с именем quantity.

    Псевдонимы используются с целью задания имен для результатов выражений, например:

    USE AdventureWorks;

    GO

    SELECT AVG(UnitPrice) AS 'Average Price'

    FROM Sales.SalesOrderDetail;

    column_alias может быть использован в предложении ORDER BY. Однако он не может быть использован в предложениях WHERE, GROUP BY или HAVING. Если выражение запроса является частью инструкции DECLARE CURSOR, column_alias не может быть использован в предложении FOR UPDATE.

Замечания

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

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

Предложение OPTION недопустимо для представлений.

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

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

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

Длина возвращаемых данных для столбцов типа text или ntext, включенных в список выбора, устанавливается в минимальное значение из следующих: реальный размер столбца типа text, значение настройки TEXTSIZE сеанса по умолчанию или жестко запрограммированное ограничение. Чтобы изменить длину возвращаемого текста для сеанса, используйте инструкцию SET. По умолчанию ограничение на длину возвращаемых при помощи инструкции SELECT текстовых данных равно 4 000 байт.

Компонент SQL Server 2005 Database Engine вызывает исключение номер 511 и осуществляет откат транзакции до момента выполнения текущей инструкции, если наблюдается одно из следующих явлений.

  • Следствием инструкции SELECT является строка результата или строка промежуточной таблицы, превышающая 8 060 байт.
  • Инструкции DELETE, INSERT или UPDATE производят действия со строкой, превышающей 8 060 байт.

Ошибка возникает в случае, если не указано имя для столбца, созданного при помощи инструкции SELECT INTO или CREATE VIEW.

Выбор столбцов идентичности

При выборе существующего столбца идентичности в новой таблице новый столбец наследует свойство IDENTITY, если не выполняется ни одно из следующих условий:

  • инструкция SELECT содержит соединение, предложение GROUP BY или статистическую функцию;
  • несколько инструкций SELECT соединены при помощи UNION;
  • столбец идентичности встречается более чем один раз в списке выбора;
  • столбец идентичности является частью выражения.

Если любое из этих условий выполняется, столбец создается как NOT NULL, и не наследует свойство IDENTITY. Все правила и ограничения для столбцов идентичности применяются к новой таблице.

Внешние соединения старого типа

Более ранние версии SQL Server поддерживают определение внешних соединений, которые используют операторы *= и =* в предложении WHERE. SQL Server версии 7.0 поддерживает стандарт SQL-92. Это предоставляет возможность использования операторов соединения в предложении FROM. Если уровень совместимости базы данных установлен в значении 90, операторы внешнего соединения (*= и =*) не поддерживаются.

Порядок обработки предложений WHERE, GROUP BY и HAVING

Следующие шаги показывают порядок обработки для инструкции SELECT, содержащей предложения WHERE, GROUP BY и HAVING:

  1. предложение FROM возвращает первоначальный результирующий набор;
  2. предложение WHERE исключает строки, не соответствующие условию поиска;
  3. предложение GROUP BY собирает выбранные строки в одну группу для каждого уникального значения в предложении GROUP BY;
  4. статистические функции, указанные в списке выбора, вычисляют суммарные значения для каждой группы;
  5. предложение HAVING дополнительно исключает строки, не соответствующие условию поиска.

Разрешения

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

Если для создания постоянной таблицы используется предложение INTO, пользователь должен иметь права на CREATE TABLE в целевой базе данных.

См. также

Справочник

CONTAINS (Transact-SQL)
Функция CONTAINSTABLE (Transact-SQL)
CREATE TRIGGER (Transact-SQL)
CREATE VIEW (Transact-SQL)
DELETE (Transact-SQL)
EXECUTE (Transact-SQL)
Выражения (Transact-SQL)
FREETEXT (Transact-SQL)
FREETEXTTABLE (Transact-SQL)
INSERT (Transact-SQL)
SET TRANSACTION ISOLATION LEVEL (Transact-SQL)
table (Transact-SQL)
UNION (Transact-SQL)
UPDATE (Transact-SQL)
EXCEPT и INTERSECT (Transact-SQL)
Предложение WHERE (Transact-SQL)

Другие ресурсы

Запросы полнотекстового поиска
Основные принципы соединения
Основы вложенных запросов
Использование переменных и параметров (ядро СУБД)
Использование идентификаторов в качестве имен объектов

Справка и поддержка

Получение помощи по SQL Server 2005