ZDNetChina中文社区 » 数据库开发 » SQLServer » SELECT语句基本


2008-5-27 13:14 风中劲草
SELECT语句基本

[size=2] SELECT语句
【类别】
    DML
【语法】
    SELECT statement ::=
   
    [ORDER BY {order_by_expression|column_position [ASC|DESC]}
    [,…n]]
    [COMPUTE
    {{ AVG|COUNT|MAX|MIN|SUM }(expression)}[,…n]
    [BY expression [,…n]]
    ]
    [FOR { BROWSE|COUNT|XML|MIN|SUM }(expression)][,…n]
    [, XMLDATA]
    [, ELEMENTS]
    [, BINARY base64]
    }
    ]
    [OPTION ([,…n])]
     ::=
    {|()}
    [UNION [ALL])[…n]]
     ::=
    SELECT [ALL|DISTINCT]
    [{TOP integer|TOP integer PERCENT}[WITH TIES]]
   
    [INTO new_table]
    [FROM {}[,…n]]
    [WHERE ]
    [GROUP BY [ALL] group_by_expression [,…n]
    [WITH {CUBE|ROLLUP}]
    ]
    [HAVING ]
   
    SELECT语句功能强大,但也非常复杂。按照主要的子句总结归纳,SELECT语句语法大致如下:
   
    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]]
   
【参数】
    下面分别列出各个子句的语法。
    SELECT子句
    使用SELECT子句来选择列,其语法如下:
   
    SELECT [ALL|DISTINCT]
    [TOP n [PERCENT] [WITH TIES] ]
   
     ::=
    { *
    |{table_name|view_name|table_alias}.*
    {column_name|expression|IDENTITYCOL|ROWGUIDCOL}
    [ [AS] column_alias]
    |column_alias=expression
    } [,…n]
   
    其中,各关键字和参数说明如下:
   
    ★ ALL 指定在结果集中可以显示重复行。ALL是默认设置。
    ★ DISTINCT 指定在结果集中只能显示惟一行。为了实现DISTINCT关键字的用途,空值被认为相等。
    ★ TOP n [PERCENT] 指定从查询结果集中输出前n行。n的取值范围是0到4 294 967 295之间的整数。如果指定了PERCENT,那么只从结果集中输出前百分之n行,这时,n的取值范围是0到100之间的整数。如果查询包含ORDER BY子句,将输出ORDER BY子句排序的前n行(或前百分之n行)。如果查询没有包含ORDER BY子句,行的顺序将任意排列。
    ★ WITH TIES 指定从基本结果集中返回附加的行,这些行包含与出现TOP n(PERCENT)行最后的ORDER BY列中的值相同的值。如果指定了ORDER BY子句,则只能指定TOP...WITH TIES。
    ★ 为结果集选择的列,每列用逗号隔开。
    ★ * 指定在FROM子句内返回所有表和视图内的所有列。列按FROM子句所指定的表或视图返回,并按它们在表或视图中的顺序排列。
    ★ {table_name|view_name|table_alias}.* 将*的作用域限定为指定的表或视图。
    ★ column_name 返回的列名。限定column_name以避免二义性引用,当FROM子句中的两个表内有包含重复名的列时会出现这种情况。例如,Northwind数据库中的Customers和Orders表内都有名为ColumnID的列,如果在查询中联接这两个表,可以在选择列表中将客户ID指定为Customers.CustomerID。
    ★ expression 列名、常量、函数以及由运算符连接的列名、常量和函数的任意组合,或者子查询。
    ★ IDENTITYCOL 返回标识列。
    ★ ROWGUIDCOL 返回行全局惟一标识列。
    ★ column_alias 指定查询结果集内替换列名的名称。
    INTO子句
    INTO子句用于创建新表并将结果行从查询插入新表中。若要执行带INTO子句的SELECT语句,必须在目的数据库内具有CREATE TABLE权限。SELECT...INTO不能与COMPUTE子句一起使用。其语法如下:
   
    [INTO new_table]
    根据选择列表中的列和WHERE子句选择的行,new_table指定要创建的新表名。new_table的格式通过对选择列表中的表达式进行取值来确定。new_table中的列按选择列表指定的顺序创建。new_table中的每列有与选择列表中的相应表达式相同的名称、数据类型和值。
    当选择列表中包含计算列时,新表中的相应列不是计算列。新列中的值是在执行SELECT...INTO时计算出的。
    FROM子句
    FROM子句用于指定查询的表或视图,其语法如下:
   
    [FROM {} [,…n] ]
     ::=
    table_name [[AS] table_alias] [WITH([,…n] ) ]
    |view_name [[AS] table_alias]
    |rowset_function [ [AS] table_alias]
    |OPENXML
    |derived_table [AS] table_alias [(column_alias [,…n] ) ]
    |
     ::=
     ON
    | CROSS JOIN
    |
     ::=
    [INNER|{{LEFT|RIGHT|FULL}[OUTRE]}]
    []
    JOIN
   
    其中,各关键字和参数说明如下:
   
    ★ 指定用于SELECT语句的表、视图、派生表和联接表。可在语句中使用多达256个表。
    ★ table_name [[AS] table_alias] 指定表名以及可选的别名。
    ★ 表提示。表提示指定一个表扫描、查询优化器要使用的一个或多个索引或查询优化器要在该表中为该SELECT语句使用的锁定方法。虽然这是一个选项,但查询优化器通常无须指定提示就能够选择最佳优化方法。的详细语法请参见SQL Server联机分析。
    ★ view_name [[AS] table_alias] 指定视图名以及可选的别名。
    ★ rowset_function [ [AS] table_alias] 指定行集函数以及可选的别名。
    ★ OPENXML 在XML文档上提供行集视图。
    ★ WITH([,…n] ) 给表提供提示。
    ★ derived_table [AS] table_alias 嵌套SELECT语句。
    ★ column_alias 列的别名。
    ★ 指定两个或多个表的积的结果集。
    ★ ON 指定联接所基于的条件。
    ★ CROSS JOIN 指定两个表的矢量积。
    ★ 指定联接操作的类型。
    ★ INNER 返回所有相匹配的行对。
    ★ {LEFT|RIGHT|FULL}[OUTRE] 指定内联接返回行的情况。如果是LEFT[OUTRE],表示查询结果集中不仅包括所有由内联接返回的行,还包括来自左表的不符合条件的行。如果是RIGHT[OUTRE],表示查询结果集中不仅包括所有由内联接返回的行,还包括来自右表的不符合条件的行。如果是FULL[OUTRE],表示结果集中包含通常由内联接返回的所有行。
   
    ★ 指定联接提示。
    ★ JOIN 联接所指定的表或视图。
    WHERE子句
    WHERE子句用于设置查询条件,即限制返回的行。其语法如下:
   
    [WHERE |]
     ::=
      column_name {* = | = * } column_name
   
    其中,各关键字和参数说明如下:
   
    ★ 通过使用谓词限制结果集内返回的行。
    ★ 使用不标准的产品专用语法和WHERE子句指定外联接。*= 运算符用于指定左向外联接,=* 运算符用于指定右向外联接。
    GROUP BY子句
    使用Group BY子句可以对数据按照某个字段进行分组。如果SELECT子句中包含聚合函数,则会将聚合函数应用到所选行的子组中。Group BY子句的语法如下:
   
    [GROUP BY [ALL] group_by_expression [,…n]
      [WITH { CUBE|ROLLUP}]
    ]
   
    其中,各关键字和参数说明如下:
   
    ★ ALL 包含所有组和结果集,甚至包含任何不满足WHERE子句指定的搜索条件的组和结果集。如果指定了ALL,将对组中不满足搜索条件的汇总列返回空值。不能用CUBE或ROLLUP运算符指定ALL。如果访问远程表的查询中有WHERE子句,则不支持GROUP BY ALL操作。
    ★ group_by_expression 是对其执行分组的表达式,可以是列或引用列的非聚合表达式。在选择列表内定义的列的别名不能用于指定分组列。
    ★ CUBE 指定在结果集内不仅包含由GROUP BY提供的正常行,还包含汇总行。在结果集内返回每个可能的组和字组组合的GROUP BY汇总行。GROUP BY汇总行在结果中显示为NULL,但可用来表示所有值。使用GROUPING函数确定结果集内的空值是否是GROUP BY汇总值。
    ★ ROLLUP 指定在结果集内不仅包含由GROUP BY提供的正常行,还包含汇总行。按层次结构顺序,从组内的最低级别到最高级别汇总组。组的层次结构取决于指定分组列时所使用的顺序。更改分组列的顺序会影响在结果集内生成的行数。
    HAVING子句
    HAVING子句指定组或聚合的搜索条件,它通常与GROUP BY子句一起使用。如果不使用GROUP BY子句,HAVING的行为与WHERE子句一样。其语法如下:
    [HAVING ]
    其中,指定搜索条件,其格式与WHERE子句的搜索条件类似。在HAVING子句中不能使用text,image和ntext数据类型。
    ORDER BY子句
   
    使用ORDER BY子句可以对搜索的结果进行排序。除非SELECT语句同时指定TOP,否则ORDER BY子句在视图、内嵌函数、派生表和子查询中无效。ORDER BY子句的语法如下:
    [ORDER BY { order_by_expression [ASC|DESC] } [,…n] ]
    其中,各关键字和参数说明如下:
   
    ★ order_by_expression 指定要排序的列,可以将排序的列指定为列名、列的别名(可由表名或视图名限定)和表达式,或者指定为代表选择列表内的名称、别名或表达式的位置的负整数。可指定多个排序列。
    ★ ASC 指定按递增顺序,从最低值到最高值对指定列中的值进行排序。
    ★ DESC 指定按递减顺序,从最高值到最低值对指定列中的值进行排序[/size]

2008-5-27 13:15 默默512
好啊,学习一下,谢谢

页: [1]
查看完整版本: SELECT语句基本


Powered by Discuz!  Archiver   © 2001-2006 Comsenz Inc.