SELECT (Entity SQL)

Indique les éléments retournés par une requête.

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

Arguments

  • ALL
    Indique que les doublons peuvent apparaître dans l'ensemble de résultats. ALL est la valeur par défaut.
  • DISTINCT
    Indique que seuls les résultats uniques peuvent apparaître dans l'ensemble de résultats.
  • VALUE
    Autorise la spécification d'un seul élément et n'ajoute pas de wrapper de ligne.
  • topSubclause
    Toute expression valide indiquant le nombre de premiers résultats à retourner de la requête, sous la forme top (expr).

    Le paramètre LIMIT de l'opérateur ORDER BY (Entity SQL) permet également de sélectionner les n premiers éléments dans le jeu de résultats.

  • aliasedExpr
    Expression sous la forme :

    expr comme identifier | expr

  • expr
    Littéral ou expression.

Notes

La clause SELECT est évaluée après l'évaluation des clauses FROM (Entity SQL), GROUP BY (Entity SQL) et HAVING (Entity SQL). La clause SELECT ne peut faire référence qu'aux éléments qui se trouvent actuellement dans l'étendue (de la clause FROM ou d'étendues externes). Si une clause GROUP BY a été spécifiée, la clause SELECT ne peut faire référence qu'aux alias des clés GROUP BY. Le référencement des éléments de la clause FROM n'est autorisé que dans les fonctions d'agrégation.

La liste constituée d'une ou plusieurs expressions de requête figurant après le mot clé SELECT est appelée « liste de sélection » ou, de manière plus formelle, « projection ». La forme de projection la plus courante est une expression de requête unique. Si vous sélectionnez un membremember1dans une collection collection1, vous générez une nouvelle collection constituée de toutes les valeursmember1pour chaque objet de collection1, comme l'illustre l'exemple suivant.

SELECT collection1.member1 FROM collection1

Par exemple, sicustomersest une collection de type Customer possédant une propriétéNamede type string, le fait de sélectionnerNamedanscustomersgénèrera une collection de chaînes, comme l'illustre l'exemple suivant.

SELECT customers.Name FROM customers AS c

Il est également possible d'utiliser la syntaxe JOIN (FULL, INNER, LEFT, OUTER, ON et RIGHT). ON est requis pour les jointures internes et n'est pas autorisé pour les jointures croisées.

Clauses « row select » et « value select »

Entity SQL prend en charge deux variantes de la clause SELECT. La première variante, « row select », est identifiée par le mot clé SELECT et peut être utilisée pour spécifier une ou plusieurs valeurs devant être projetées. Étant donné qu'un wrapper de ligne est implicitement ajouté de part et d'autre des valeurs retournées, le résultat de l'expression de requête est toujours un multiensemble de lignes.

Chaque expression de requête figurant dans une clause « row select » doit spécifier un alias. Si aucun alias n'est spécifié, Entity SQL essaie d'en générer un en utilisant les règles de génération d'alias.

L'autre variante de la clause SELECT, « value select », est identifiée par le mot clé SELECT VALUE. Elle autorise la spécification d'une seule valeur et n'ajoute pas de wrapper de ligne.

Une clause « row select » peut toujours être exprimée en termes de sélection de valeur (SELECT VALUE), comme l'illustre l'exemple suivant.

SELECT 1 AS a, "abc" AS b, a+34 AS c
SELECT VALUE ROW(1 AS a, "abc" AS b, a+34 AS c) 

Modificateurs All et Distinct

Les deux variantes de la clause SELECT d'Entity SQL permettent de spécifier un modificateur ALL ou DISTINCT. Si le modificateur DISTINCT est spécifié, les doublons sont éliminés de la collection créée par l'expression de requête (jusqu'à la clause SELECT elle-même incluse). Si le modificateur ALL est spécifié, aucune élimination de doublons n'est réalisée ; ALL est spécifié par défaut.

Différences par rapport à Transact-SQL

Contrairement à Transact-SQL, Entity SQL ne prend pas en charge l'utilisation de l'argument * dans la clause SELECT. En revanche, Entity SQL autorise les requêtes pour projeter des enregistrements entiers en faisant référence aux alias de collection de la clause FROM, comme l'illustre l'exemple suivant.

SELECT * FROM T1, T2

L'expression de requête Transact-SQL précédente est exprimée dans Entity SQL de la façon suivante :

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

Exemple

La requête Entity SQL ci-dessous utilise l'opérateur SELECT pour spécifier les éléments qu'une requête doit retourner. Cette requête est basée sur le modèle de vente AdventureWorks Sales Model. Pour compiler et exécuter cette requête, procédez comme suit :

  1. Suivez la procédure indiquée dans Procédure : exécuter une requête qui retourne des résultats StructuralType (EntityClient).

  2. Passez à la méthode ExecuteStructuralTypeQuery la requête suivante en tant qu'argument :

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

Voir aussi

Référence

TOP (Entity SQL)

Concepts

Expressions de requête (Entity SQL)
Référence Entity SQL