Поделиться через


SELECT (язык Entity SQL)

Указывает элементы, возвращаемые запросом.

SELECT [ ALL | DISTINCT ] [ topSubclause ] aliasedExpr 
      [{ , aliasedExpr }]
or
SELECT VALUE [ ALL | DISTINCT ] [ topSubclause ] expr

Аргументы

  • ALL
    Указывает на то, что в результирующем наборе могут появляться повторяющиеся элементы. ALL является значением по умолчанию.
  • DISTINCT
    Указывает, что в результирующем наборе возвращаются только уникальные результаты.
  • VALUE
    Позволяет указать только один элемент и не добавляет оболочку строк.
  • topSubclause
    Любое допустимое выражение, указывающее число первых результатов, возвращаемых запросом, в формате top (expr).

    Параметр LIMIT оператора ORDER BY (язык Entity SQL) также позволяет выбрать первые n элементов результирующего набора.

  • aliasedExpr
    Выражение в следующем формате.

    expr as identifier | expr

  • expr
    Литерал или выражение.

Замечания

Предложение SELECT вычисляется после того, как будут вычислены предложения FROM (язык Entity SQL), GROUP BY (язык Entity SQL) и HAVING (язык Entity SQL). В предложении SELECT могут быть указаны только те элементы, которые в настоящий момент находящиеся в области (из предложения FROM, из внешних областей). Если указано предложение GROUP BY, то предложение SELECT может ссылаться только на псевдонимы для ключей GROUP BY. Обращение к элементам предложения FROM допустимо только в статистических функциях.

Список, содержащий одно или более выражений запросов, следующих за ключевым словом SELECT, называется списком выбора, или более формально — проекцией. Наиболее распространенная форма проекции — единственное выражение запроса. Если выбрать элемент member1 из коллекции collection1, то будет подготовлена новая коллекция всех значений member1 для каждого объекта в collection1, как показано в следующем примере.

SELECT collection1.member1 FROM collection1

Например, если customers является коллекцией типа Customer со свойством Name типа string, то выбор Name из customers даст коллекцию строк, как показано в следующем примере.

SELECT customers.Name FROM customers AS c

Можно также воспользоваться синтаксисом JOIN (FULL, INNER, LEFT, OUTER, ON и RIGHT). ON требуется для внутренних соединений и недопустим для перекрестных соединений.

Предложения выбора строк и значений

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

Для каждого выражения запроса в выборе строки должен быть указан псевдоним. Если псевдоним не указан, то Entity SQL пытается создать его на основе правил создания псевдонимов.

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

Выбор строк всегда можно выразить в терминах VALUE SELECT, как показано в следующем примере.

SELECT 1 AS a, "abc" AS b, a+34 AS c
SELECT VALUE ROW(1 AS a, "abc" AS b, a+34 AS c) 

Модификаторы All и Distinct

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

Отличия от языка Transact-SQL

В отличие от Transact-SQL, язык Entity SQL не поддерживает использование аргумента «*» в предложении SELECT. Вместо этого в языке Entity SQL запросы могут проецировать целые записи, ссылаясь на псевдонимы коллекций из предложения FROM, как показано в следующем примере.

SELECT * FROM T1, T2

Предыдущее выражение запроса Transact-SQL выражается на языке Entity SQL следующим образом.

SELECT a1, a2 FROM T1 AS a1, T2 AS a2

Примеры

В следующем запросе Entity SQL оператор SELECT используется для задания элементов, возвращаемых запросом. Запрос основан на модели AdventureWorks Sales. Для компиляции и запуска этого запроса выполните следующие шаги.

  1. Следуйте инструкциям в разделе Как выполнить запрос, возвращающий результаты типа StructuralType (EntityClient).

  2. Передайте следующий запрос в качестве аргумента методу ExecuteStructuralTypeQuery:

SELECT VALUE product FROM AdventureWorksEntities.Product AS product

Далее показан вывод.

ProductID: 1
Name: Adjustable Race
ProductNumber: AR-5381
MakeFlag: False
ProductID: 2
Name: Bearing Ball
ProductNumber: BA-8327
MakeFlag: False
ProductID: 3
Name: BB Ball Bearing
ProductNumber: BE-2349
MakeFlag: True
ProductID: 4
Name: Headset Ball Bearings
ProductNumber: BE-2908
MakeFlag: False
ProductID: 316
Name: Blade
ProductNumber: BL-2036
MakeFlag: True
...

См. также

Справочник

TOP (Entity SQL)

Основные понятия

Выражения запросов (язык Entity SQL)
Справочник по Entity SQL