Partager via


SELECT (Entity SQL)

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

Syntaxe

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

Les arguments

ALL Spécifie que les doublons peuvent apparaître dans le jeu de résultats. ALL est l'argument par défaut.

DISTINCT Spécifie que seuls les résultats uniques peuvent apparaître dans le jeu 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 qui indique le nombre de premiers résultats à retourner à partir de la requête, du formulaire top(expr).

Le paramètre LIMIT de l’opérateur ORDER BY vous permet également de sélectionner les premiers n éléments du jeu de résultats.

aliasedExpr Expression du formulaire :

expr comme identifier | expr

expr Littéral ou expression.

Remarques

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

La liste d’une ou plusieurs expressions de requête qui suivent le mot clé SELECT est connue sous le nom de liste de sélection, ou plus formellement comme projection. La forme la plus générale de projection est une expression de requête unique. Si vous sélectionnez un membre member1 à partir d’une collection collection1, vous allez produire une nouvelle collection de toutes les member1 valeurs de chaque objet collection1, comme illustré dans l’exemple suivant.

SELECT collection1.member1 FROM collection1

Par exemple, s’il s’agit customers d’une collection de types Customer dont la propriété Name est de type string, la sélection Name à partir customers de laquelle elle génère une collection de chaînes, comme illustré dans 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 nto est autorisé pour les jointures croisées.

Clauses Row et Value Select

Entity SQL prend en charge deux variantes de la clause SELECT. La première variante, la sélection de ligne, est identifiée par le mot clé SELECT et peut être utilisée pour spécifier une ou plusieurs valeurs qui doivent être projetées. Étant donné qu’un wrapper de lignes est implicitement ajouté autour des valeurs retournées, le résultat de l’expression de requête est toujours un multiset de lignes.

Chaque expression de requête d’une ligne sélectionnée doit spécifier un alias. Si aucun alias n’est spécifié, Entity SQL tente de générer un alias à l’aide des 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. Il n’autorise qu’une seule valeur à spécifier et n’ajoute pas de wrapper de ligne.

Une sélection de ligne est toujours expressible en termes de VALUE SELECT, comme illustré dans l’exemple suivant.

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

Tous et modificateurs distincts

Les deux variantes de SELECT dans Entity SQL autorisent la spécification d’un modificateur ALL ou DISTINCT. Si le modificateur DISTINCT est spécifié, les doublons sont éliminés de la collection produite par l’expression de requête (jusqu’à et y compris la clause SELECT). Si le modificateur ALL est spécifié, aucune élimination en double n’est effectuée ; ALL est la valeur par défaut.

Différences de Transact-SQL

Contrairement à Transact-SQL, Entity SQL ne prend pas en charge l’utilisation de l’argument * dans la clause SELECT. Au lieu de cela, Entity SQL permet aux requêtes de projeter des enregistrements entiers en référençant les alias de collection de la clause FROM, comme illustré dans 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 manière suivante.

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

Exemple :

La requête Entity SQL suivante utilise l’opérateur SELECT pour spécifier les éléments à retourner par une requête. La requête est basée sur adventureWorks Sales Model. Pour compiler et exécuter cette requête, procédez comme suit :

  1. Suivez la procédure dans How to : Execute a Query that Returns StructuralType Results.

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

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

Voir aussi