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:
Siga o procedimento em Como executar uma consulta que retorna resultados de StructuralType.
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