SELECT (Transact-SQL)
从数据库中检索行,并允许从一个或多个表中选择一个或多个行或列。虽然 SELECT 语句的完整语法较复杂,但其主要子句可归纳如下:
[ WITH <common_table_expression>]
SELECT select_list [ INTO new_table ]
[ FROM table_source ] [ WHERE search_condition ]
[ GROUP BY group_by_expression]
[ HAVING search_condition]
[ ORDER BY order_expression [ ASC | DESC ] ]
可在查询之间使用 UNION、EXCEPT 和 INTERSECT 运算符,以便将各个查询的结果合并或比较到一个结果集中。
语法
<SELECT statement> ::=
[WITH <common_table_expression> [,...n]]
<query_expression>
[ ORDER BY { order_by_expression | column_position [ ASC | DESC ] }
[ ,...n ] ]
[ COMPUTE
{ { AVG | COUNT | MAX | MIN | SUM } (expression )} [ ,...n ]
[ BY expression [ ,...n ] ]
]
[ <FOR Clause>]
[ OPTION ( <query_hint> [ ,...n ] ) ]
<query_expression> ::=
{ <query_specification> | ( <query_expression> ) }
[ { UNION [ ALL ] | EXCEPT | INTERSECT }
<query_specification> | ( <query_expression> ) [...n ] ]
<query_specification> ::=
SELECT [ ALL | DISTINCT ]
[TOP ( expression ) [PERCENT] [ WITH TIES ] ]
< select_list >
[ INTO new_table ]
[ FROM { <table_source> } [ ,...n ] ]
[ WHERE <search_condition> ]
[ <GROUP BY> ]
[ HAVING < search_condition > ]
注释
由于 SELECT 语句的复杂性,下面按子句说明详细的语法元素和参数:
SELECT 语句中的子句顺序非常重要。可以省略可选子句,但这些子句在使用时必须按适当的顺序出现。
只有当这些语句的选择列表包含给函数的局部变量赋值的表达式时,在用户定义函数中才允许有 SELECT 语句。
对于由四部分组成的名称,若其中的服务器名称使用的是 OPENDATASOURCE 函数,则该名称可以在表名能够在 SELECT 语句内出现的任何位置作为表源使用。
某些应用于 SELECT 语句的语法限制涉及到远程表。有关详细信息,请参阅分布式查询的使用准则。
SELECT 语句的处理顺序
以下步骤显示 SELECT 语句的处理顺序。
FROM
ON
JOIN
WHERE
GROUP BY
WITH CUBE 或 WITH ROLLUP
HAVING
SELECT
DISTINCT
ORDER BY
TOP
权限
要求具有 sysadmin 固定服务器角色、db_owner 和 db_datareader 固定数据库角色的成员身份,或者必须是表的所有者。sysadmin、db_owner 和 db_securityadmin 角色成员以及表所有者可以将权限转让给其他用户。