SELECT (Entity SQL)

Especifica los elementos devueltos por una consulta.

SELECT [ ALL | DISTINCT ] [ topSubclause ] aliasedExpr 
      [{ , aliasedExpr }]
or
SELECT VALUE [ ALL | DISTINCT ] [ topSubclause ] expr

Argumentos

  • ALL
    Especifica que el conjunto de resultados puede incluir resultados duplicados. ALL es el valor predeterminado.
  • DISTINCT
    Especifica que el conjunto de resultados sólo 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 (Entity SQL) también permite seleccionar los primeros n elementos del conjunto de resultados.

  • aliasedExpr
    Expresión del tipo:

    expr como identifier | expr

  • expr
    Literal o expresión.

Comentarios

La cláusula SELECT se evalúa después de que se evalúen las cláusulas FROM (Entity SQL), GROUP BY (Entity SQL) y HAVING (Entity SQL). La cláusula SELECT sólo 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 sólo se permite para hacer referencia a los alias para las claves GROUP BY. La referencia a los elementos de la cláusula de FROM sólo 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 miembromember1de una colección collection1, generará una nueva colección de todos los valores demember1para cada objeto de collection1, como se muestra en el ejemplo siguiente.

SELECT collection1.member1 FROM collection1

Por ejemplo, sicustomerses una colección de tipo Customer que tiene una propiedadNameque es de tipo string, la acción de seleccionarNamedecustomersproducirá 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 variante, selección de fila, se identifica mediante la palabra clave SELECT y se puede utilizar para especificar uno o más valores que se deben proyectar externamente. Dado que un contenedor de filas se agrega implícitamente encapsulando 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 usando 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, a+34 AS c
SELECT VALUE ROW(1 AS a, "abc" AS b, a+34 AS 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 Transact-SQL anterior se expresa en Entity SQL de la manera siguiente.

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 Cómo ejecutar una consulta que devuelve resultados StructuralType (EntityClient).

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

SELECT VALUE product FROM AdventureWorksEntities.Product AS product

La salida se muestra a continuación:

ProductID: 1
Name: Adjustable Race
ProductNumber: AR-5381
MakeFlag: False
ProductID: 2
Name: Bearing Ball
ProductNumber: BA-8327
MakeFlag: False
ProductID: 3
Name: BB Ball Bearing
ProductNumber: BE-2349
MakeFlag: True
ProductID: 4
Name: Headset Ball Bearings
ProductNumber: BE-2908
MakeFlag: False
ProductID: 316
Name: Blade
ProductNumber: BL-2036
MakeFlag: True
...

Vea también

Referencia

TOP (Entity SQL)

Conceptos

Expresiones de consulta (Entity SQL)
Referencia de Entity SQL