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 运算符,以便将各个查询的结果合并或比较到一个结果集中。

主题链接图标Transact-SQL 语法约定

语法

<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 语句的处理顺序。

  1. FROM

  2. ON

  3. JOIN

  4. WHERE

  5. GROUP BY

  6. WITH CUBE 或 WITH ROLLUP

  7. HAVING

  8. SELECT

  9. DISTINCT

  10. ORDER BY

  11. TOP

权限

要求具有 sysadmin 固定服务器角色、db_owner 和 db_datareader 固定数据库角色的成员身份,或者必须是表的所有者。sysadmin、db_owner 和 db_securityadmin 角色成员以及表所有者可以将权限转让给其他用户。

请参阅

参考