指定查询返回的元素。
语法
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
论据
ALL 指定重复项可以出现在结果集中。 ALL 为默认值。
DISTINCT 指定只有唯一的结果才能显示在结果集中。
VALUE 仅允许指定一个项,并且不会在行包装器上添加。
topSubclause 任何指示要从查询返回的第一个结果数的有效表达式,形式 top(expr)。
ORDER BY 运算符的 LIMIT 参数还允许你在结果集中选择第一个 n 项。
aliasedExpr 窗体的表达式:
expr 如 identifier | expr
expr 文本或表达式。
注解
SELECT 子句在 计算 FROM、 GROUP BY 和 HAVING 子句后计算。 SELECT 子句只能引用当前范围内的项(来自 FROM 子句或外部作用域)。 如果指定了 GROUP BY 子句,则仅允许 SELECT 子句引用 GROUP BY 键的别名。 仅在聚合函数中允许引用 FROM 子句项。
SELECT 关键字后面的一个或多个查询表达式的列表称为选择列表,或更正式地作为投影。 投影的最常规形式是单个查询表达式。 如果从集合collection1中选择一个成员member1,将生成一个新集合,该集合中每个对象collection1的所有member1值,如以下示例所示。
SELECT collection1.member1 FROM collection1
例如,如果customers类型的集合Customer具有Namestring类型属性,则从Namecustomers中选择将生成字符串集合,如以下示例所示。
SELECT customers.Name FROM customers AS c
也可以使用 JOIN 语法(FULL、INNER、LEFT、OUTER、ON 和 RIGHT)。 内部联接需要 ON,并且允许跨联接。
行和值 Select 子句
实体 SQL 支持 SELECT 子句的两个变体。 第一个变体(行选择)由 SELECT 关键字标识,可用于指定应投影出的一个或多个值。由于在返回的值周围隐式添加行包装器,因此查询表达式的结果始终是多行集。
行选择中的每个查询表达式都必须指定别名。 如果未指定别名,实体 SQL 会尝试使用别名生成规则生成别名。
SELECT 子句的另一个变体(值 select)由 SELECT VALUE 关键字标识。 它只允许指定一个值,并且不添加行包装器。
行选择在 VALUE SELECT 方面始终可表达,如以下示例所示。
SELECT 1 AS a, "abc" AS b FROM C
SELECT VALUE ROW(1 AS a, "abc" AS b) FROM C
所有和不同的修饰符
实体 SQL 中的 SELECT 两种变体都允许指定 ALL 或 DISTINCT 修饰符。 如果指定 DISTINCT 修饰符,将从查询表达式生成的集合中消除重复项(最多包括 SELECT 子句)。 如果指定了 ALL 修饰符,则不执行重复消除;ALL 为默认值。
与 Transact-SQL 的差异
与 Transact-SQL 不同,Entity SQL 不支持在 SELECT 子句中使用 * 参数。 相反,Entity SQL 允许查询通过引用 FROM 子句中的集合别名来投影整个记录,如以下示例所示。
SELECT * FROM T1, T2
前面的 Transact-SQL 查询表达式采用以下方式在 Entity SQL 中表示。
SELECT a1, a2 FROM T1 AS a1, T2 AS a2
示例:
以下 Entity SQL 查询使用 SELECT 运算符指定要由查询返回的元素。 查询基于 AdventureWorks 销售模型。 若要编译并运行此查询,请执行以下步骤:
按照作方法中的过程作 :执行返回 StructuralType 结果的查询。
将以下查询作为参数传递给
ExecuteStructuralTypeQuery方法:
SELECT VALUE product FROM AdventureWorksEntities.Products
AS product WHERE product.ListPrice < @price