SELECT (SQL de entidade)
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 duplicatas podem aparecer no conjunto de resultados. ALL é o padrão.
DISTINCT Especifica que apenas resultados exclusivos podem aparecer no conjunto de resultados.
VALOR Permite que apenas 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 da consulta, do formulário top(expr)
.
O parâmetro LIMIT do operador ORDER BY também permite selecionar os primeiros n itens no conjunto de resultados.
aliasedExpr
Uma expressão da forma:
expr
como identifier
| expr
expr
Um literal ou expressão.
Observações
A cláusula SELECT é avaliada após as cláusulas FROM, GROUP BY e HAVING terem sido avaliadas. A cláusula SELECT só pode referir-se a 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 só poderá fazer referência aos aliases das chaves GROUP BY. A referência aos itens da cláusula FROM só é permitida em funções agregadas.
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 member1
valores para cada objeto no collection1
, conforme ilustrado no exemplo a seguir.
SELECT collection1.member1 FROM collection1
Por exemplo, se customers
for uma coleção de 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 é nto permitido para junções cruzadas.
Cláusulas de seleção de linha e valor
O Entity SQL suporta duas variantes da cláusula SELECT. A primeira variante, row select, é 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 conjunto múltiplo 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.
A outra variante da cláusula SELECT, value select, é identificada pela palavra-chave SELECT VALUE. Ele permite que apenas um valor seja especificado e não adiciona um wrapper de linha.
Uma seleção de linha é sempre expressável 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
Todos e distintos modificadores
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 produzida pela expressão de consulta (até e incluindo a cláusula SELECT). Se o modificador ALL for especificado, nenhuma eliminação duplicada será executada; ALL é o padrão.
Diferenças do Transact-SQL
Ao contrário 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 fazendo referência aos 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 em Entity SQL da seguinte maneira.
SELECT a1, a2 FROM T1 AS a1, T2 AS a2
Exemplo
A consulta Entity SQL a seguir usa o operador SELECT para especificar os elementos a serem retornados por uma consulta. A consulta é baseada no Modelo de Vendas AdventureWorks. Para compilar e executar esta consulta, siga estes passos:
Siga o procedimento em Como: Executar uma consulta que retorna resultados StructuralType.
Passe a seguinte consulta como um argumento para o
ExecuteStructuralTypeQuery
método:
SELECT VALUE product FROM AdventureWorksEntities.Products
AS product WHERE product.ListPrice < @price