SELECIONAR (Entity SQL)

Especifica os elementos retornados por uma consulta.

Sintaxe

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

Argumentos

ALL Especifica que as duplicatas podem aparecer no conjunto de resultados. ALL é o padrão.

DISTINCT Especifica que apenas resultados exclusivos podem aparecer no conjunto de resultados.

VALUE Permite que somente um item seja especificado, e não adiciona um wrapper de linha.

topSubclause Qualquer expressão válida que indique o número de primeiros resultados a serem retornados com a consulta, da forma top(expr).

O parâmetro LIMIT do operador ORDER BY também permite que você selecione os primeiros n itens no conjunto de resultados.

aliasedExpr Uma expressão da forma:

expr como identifier | expr

expr Um literal ou uma expressão.

Comentários

A cláusula SELECT é avaliada após a avaliação das cláusulas FROM, GROUP BY e HAVING. A cláusula SELECT pode se referir apenas aos itens atualmente no escopo (da cláusula FROM ou de escopos externos). Se uma cláusula GROUP BY tiver sido especificada, a cláusula SELECT estará autorizada apenas a referenciar os aliases das chaves GROUP BY. A referência aos itens da cláusula FROM é permitida somente em funções de agregação.

A lista de uma ou mais expressões de consulta após a palavra-chave SELECT é conhecida como a lista de seleção, ou mais formalmente como a projeção. A forma mais geral de projeção é uma única expressão de consulta. Se você selecionar um membro member1 de uma coleção collection1, produzirá uma nova coleção de todos os valores member1 de cada objeto em collection1, conforme ilustrado no exemplo a seguir.

SELECT collection1.member1 FROM collection1

Por exemplo, se customers for uma coleção do tipo Customer que tenha uma propriedade Name do tipo string, selecionar Name de customers produzirá uma coleção de cadeias de caracteres, conforme ilustrado no exemplo a seguir.

SELECT customers.Name FROM customers AS c

Também é possível usar a sintaxe JOIN (FULL, INNER, LEFT, OUTER, ON e RIGHT). ON é necessário para junções internas e não é permitido para junções cruzadas.

Cláusulas de seleção de linha e valor

O Entity SQL oferece suporte a duas variantes da cláusula SELECT. A primeira variante, a seleção de linha, é identificada pela palavra-chave SELECT e pode ser usada para especificar um ou mais valores que devem ser projetados. Como um wrapper de linha é adicionado implicitamente em torno dos valores retornados, o resultado da expressão de consulta é sempre um multiconjunto de linhas.

Cada expressão de consulta em uma seleção de linha deve especificar um alias. Se nenhum alias for especificado, o Entity SQL tentará gerar um alias usando as regras de geração de alias.

Outra variante da cláusula SELECT, seleção de valor, é identificada pela palavra-chave SELECT VALUE. Ela permite que somente um valor seja especificado, e não adiciona um wrapper de linha.

Uma seleção de linha sempre pode ser expressa em termos de VALUE SELECT, conforme ilustrado no exemplo a seguir.

SELECT 1 AS a, "abc" AS b FROM C
SELECT VALUE ROW(1 AS a, "abc" AS b) FROM C

Modificadores All e Distinct

Ambas as variantes de SELECT no Entity SQL permitem a especificação de um modificador ALL ou DISTINCT. Se o modificador DISTINCT for especificado, as duplicatas serão eliminadas da coleção gerada pela expressão de consulta (até, e inclusive, a cláusula SELECT). Se o modificador ALL for especificado, nenhuma eliminação de duplicada será executada; ALL é o padrão.

Diferenças de Transact-SQL

Diferentemente do Transact-SQL, o Entity SQL não oferece suporte ao uso do argumento * na cláusula SELECT. Em vez disso, o Entity SQL permite que as consultas projetem registros inteiros referenciando aliases de coleção da cláusula FROM, conforme ilustrado no exemplo a seguir.

SELECT * FROM T1, T2

A expressão de consulta Transact-SQL anterior é expressa no Entity SQL da seguinte forma.

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

Exemplo

A consulta Entity SQL a seguir usa o operador SELECT para especificar elementos a serem retornados por uma consulta. A consulta é baseada no modelo de vendas AdventureWorks. Para compilar e executar essa consulta, siga estas etapas:

  1. Siga o procedimento em Como executar uma consulta que retorna resultados de StructuralType.

  2. Passe a consulta a seguir como um argumento para o método ExecuteStructuralTypeQuery:

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

Confira também