SELECT (Entity SQL)

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

Синтаксис

SELECT [ ALL | DISTINCT ] [ topSubclause ] aliasedExpr
      [{ , aliasedExpr }] FROM fromClause [ WHERE whereClause ] [ GROUP BY groupByClause [ HAVING havingClause ] ] [ ORDER BY orderByClause ]
-- or
SELECT VALUE [ ALL | DISTINCT ] [ topSubclause ] expr FROM fromClause [ WHERE whereClause ] [ GROUP BY groupByClause [ HAVING havingClause ] ] [ ORDER BY orderByClause

Аргументы

ALL Указывает, что дубликаты могут отображаться в результирующем наборе. ALL является параметром по умолчанию.

DISTINCT указывает, что в результирующем наборе могут отображаться только уникальные результаты.

ЗНАЧЕНИЕ позволяет указывать только один элемент и не добавляется в оболочку строки.

topSubclause Любое допустимое выражение, указывающее количество первых результатов, возвращаемых из запроса, формы top(expr).

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

aliasedExpr Выражение формы:

expr как identifier | expr

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

Замечания

Предложение SELECT вычисляется после оценки предложений FROM, GROUP BY и HAVING . В предложении 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 FROM C
SELECT VALUE ROW(1 AS a, "abc" AS b) FROM 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. Выполните процедуру из статьи How to: Execute a Query that Returns StructuralType Results.

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

SELECT VALUE product FROM AdventureWorksEntities.Products 
    AS product WHERE product.ListPrice < @price

См. также