SELECT (Entity SQL)

Especifica los elementos devueltos por una consulta.

Sintaxis

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 el conjunto de resultados puede incluir resultados duplicados. ALL es el valor predeterminado.

DISTINCT Especifica que el conjunto de resultados solo puede incluir resultados únicos.

VALUE Solo permite que se especifique un elemento y no agrega un contenedor de filas.

topSubclause Cualquier expresión válida que indique el número de primeros resultados que ha de devolver la consulta, del tipo top(expr).

El parámetro LIMIT del operador ORDER BY también permite seleccionar los primeros n elementos del conjunto de resultados.

aliasedExpr Una expresión del tipo:

expr como identifier | expr

expr Literal o expresión.

Observaciones

La cláusula SELECT se evalúa después de que se hayan evaluado las cláusulas FROM, GROUP BY y HAVING. La cláusula SELECT solo puede hacer referencia a elementos que están actualmente en el ámbito (de la cláusula FROM o de ámbitos externos). Si se ha especificado una cláusula GROUP BY, la cláusula SELECT solo se permite para hacer referencia a los alias para las claves GROUP BY. La referencia a los elementos de la cláusula de FROM solo se permite en funciones de agregado.

La lista de una o más expresiones de consulta que siguen a la palabra clave SELECT se conoce como lista de selección o más formalmente como proyección. La forma más general de proyección es una expresión de consulta única. Si selecciona un miembro member1 de una colección collection1, generará una nueva colección de todos los valores de member1 para cada objeto de collection1, como se muestra en el ejemplo siguiente.

SELECT collection1.member1 FROM collection1

Por ejemplo, si customers es una colección de tipo Customer que tiene una propiedad Name que es de tipo string, la acción de seleccionar Name de customers producirá una colección de cadenas, como se muestra en el ejemplo siguiente.

SELECT customers.Name FROM customers AS c

También es posible utilizar la sintaxis de JOIN (FULL, INNER, LEFT, OUTER, ON y RIGHT). ON se requiere para combinaciones internas y no se permite para combinaciones cruzadas.

Cláusulas de selección de fila y valor

Entity SQL admite dos variantes de la cláusula SELECT. La primera, row select, se identifica mediante la palabra clave SELECT y se puede usar para especificar uno o varios valores que se deben proyectar. Dado que un contenedor de filas se agrega implícitamente alrededor de los valores devueltos, el resultado de la expresión de consulta siempre es un conjunto múltiple de filas.

Cada expresión de consulta en una selección de filas debe especificar un alias. Si no se especifica un alias, Entity SQL intenta generar uno mediante las reglas de generación de alias.

La otra variante de la cláusula SELECT, selección de valor, se identifica mediante la palabra clave SELECT VALUE. Solo permite que se especifique un valor y no agrega un contenedor de filas.

Una selección de fila siempre se puede expresar en términos de VALUE SELECT, como se muestra en el ejemplo siguiente.

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

Modificadores All y Distinct

Las dos variantes de SELECT en Entity SQL permiten la especificación de un modificador ALL o DISTINCT. Si se especifica el modificador DISTINCT, los resultados duplicados se eliminan de la colección producida por la expresión de consulta (hasta la cláusula SELECT e incluida dicha cláusula). Si se especifica el modificador ALL, no se lleva a cabo la eliminación de resultados duplicados; ALL es el valor predeterminado.

Diferencias respecto de Transact-SQL

A diferencia de Transact-SQL, Entity SQL no admite el uso del argumento * en la cláusula SELECT. En su lugar, Entity SQL permite que las consultas proyecten externamente registros completos haciendo referencia a los alias para la colección de la cláusula FROM, como se muestra en el ejemplo siguiente.

SELECT * FROM T1, T2

La expresión de consulta de Transact-SQL anterior se expresa en Entity SQL de la siguiente manera.

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

Ejemplo

La consulta de Entity SQL siguiente utiliza el operador SELECT para especificar los elementos que ha de devolver una consulta. La consulta se basa en el modelo AdventureWorks Sales. Para compilar y ejecutar esta consulta, siga estos pasos:

  1. Siga el procedimiento de How to: Execute a Query that Returns StructuralType Results.

  2. Pase la consulta siguiente como argumento al método ExecuteStructuralTypeQuery :

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

Consulte también