SELECT 命令

<query_expression>
   [ ORDER BY 
      {order_by_expression | column_position [ASC | DESC] } [, ...]
   ]
   [ COMPUTE 
      { 
         {
            AVG | COUNT | MAX | MIN | STDEV | STDEVP | VAR | VARP | SUM 
         } (expression) 
      } [, ... ]
      [BY expression [ , ... ] ]
   ]
   [ FOR
      { BROWSE
         | XML { RAW | AUTO | EXPLICIT }
         [, XMLDATA ][, ELEMENTS ][, BINARY base64 ]
      }
   ]
   [ OPTION (<query_hint> [ , ... ]) ]
参数 意义
ORDER BY 排序
order_by_expression  排序表达式
column_position  整数,按第 n 列排序
ASC 升序,默认
DESC 降序
COMPUTE 附加汇总列,参阅 行聚合函数
BY expression 在结果集内生成控制中断和分类汇总
<query_expression>::=

   { <query_specification> | (<query_expression>) }
   [ UNION [ALL] <query_specification> | (<query_expression>) [ ... ] ]

参数 意义
UNION 合并两个查询的记录,字段数必须相同,类型必须兼容
ALL 不消除重复行,非默认
<query_specification>::=

   SELECT
      [ ALL | DISTINCT ]
      [ { TOP integer | TOP integer PERCENT } [ WITH TIES ] ]
      <select_list>
      [ INTO new_table ]
      [ FROM <table_source> [ , ... ] ]
      [ WHERE <search_condition> | <old_outer_join> ]
      [ GROUP BY [ ALL ] group_by_expression [ , ... ]
         [ WITH { CUBE | ROLLUP } ] ]
      [ HAVING <search_condition>]

参数 意义
ALL 不消除重复行,默认
DISTINCT 各字段完全重复的行仅保留一个
TOP integer 取前 n 条记录,如果未排序则结果不确定,可更新游标不能使用
PERCENT 取前 n% 的记录,n 为 1-100
WITH TIES 限定记录数时,与最后一条并列的行也被返回(因此可能 >n 条)
GROUP BY ALL 有些组没有满足条件的记录,但也输出空值
INTO 将查询内容输出到新表,

#table 局部临时表,##table 全局临时表

临时表将存储在 tempdb 数据库中,引用方法:tempdb..#table

WITH CUBE 对每个字段的各个组分别汇总,最后总计
WITH ROLLUP 除第一个外,同 WITH CUBE,最后总计
<old_outer_join> ::=

    column_name { *= | =* } column_name

参数 意义
= 列出两边都有,且相等的值
*= 列出边列的所有值
=* 列出边列的所有值
<select_list>::=

    { *
        | { table_name | view_name | table_alias }.*
        | { column_name | expression | IDENTITYCOL | ROWGUIDCOL } [ [AS] column_alias ]
        | column_alias = expression
    } [ , ... ]

参数 意义
IDENTITYCOL 标识列,因标识列是唯一的,可用此代替
ROWGUIDCOL 全局唯一标识列,同上
column_alias 列的别名,代替原列名返回
<table_source>::=

    table_name [ [AS] table_alias ] [ WITH ( <table_hint> [ , ... ] ) ]
    | view_name [ [AS] table_alias ]
    | rowset_function [ [AS] table_alias ]
    | OPENXML
    | derived_table [AS] table_alias [ (column_alias [ , ... ] ) ]
    | <joined_table>

参数 意义
derived_table  从数据库中检索行的子查询
<joined_table>::=

      <table_source> <join_type> <table_source> ON <search_condition>
    | <table_source> CROSS JOIN <table_source>
    | <joined_table>

<join_type>::=

    [ INNER | { { LEFT | RIGHT | FULL } [OUTER] } ]
    [ <join_hint> ]
    JOIN

<query_hint>::=

   {    { HASH | ORDER } GROUP
      | { CONCAT | HASH | MERGE } UNION
      | { LOOP | MERGE | HASH } JOIN
      | FAST number_rows
      | FORCE ORDER
      | MAXDOP number
      | ROBUST PLAN
      | KEEP PLAN
      | KEEPFIXED PLAN
      | EXPAND VIEWS
   }

子查询

当 SELECT 语句作为子查询时:

  1. 必须用括号包围。
  2. 一般只包含一列。
  3. 不能使用 ORDER BY 子句。
  4. 返回多行的子查询可与 IN 运算符连用。
  5. BETWEEN 运算符不能与子查询运算。

UNION 合并结果集

  1. 列数必须相同。
  2. 数据类型必须相容。
  3. 列名取自第一个结果。
  4. 使用 ALL 将不删除重复行。
  5. 在后面的 SELECT 中的 ORDER BY 子句会引用第一个 SELECT 中的列别名。