第二章 sql语言结构------select语句详解

   select语句 

1)数据检索是数据库中最频繁执行的活动

2)在sql中,使用select语句可以在需要的表单中检索数据

3)再进行检索之前,必须知道需要的数据存储在哪里

4)select语句可以由多个查询子句组成

 

select语句可用于检索:

1)全部的行和列

2)全部的行和特定的列

3)限定范围的行

4)与一组值匹配的行

5)根据未知值检索的行

6)隐藏有重复值的行

7)根据多个搜索条件检索的行

 

 

select语句的基本结构

select  [all | distinct] select_list [ into [ new_table_name ] ] from { table_name | view_name } [ [, {table_name2 | view_name2} [ ...., { table_name16 | view_name16 } ] ] [ where search_conditions ]  [group by group_by_list] [ having search_conditions ] [ order by order_list [ asc | desc ] ]

各参数解释

1)all  指明查询结果可以显示值相同的列.all是系统默认的

2)distinct  指明查询结果中如果有值相同的列,则只显示其中的一列.对distinct来说,null值被认为是相同的列

3)select_list需要检索的字段的列表,字段名称之间用逗号分隔.这个列表中既可以包含数据源或视图中的字段名称,还可以包含其他表达式.如用* ,则系统返回数据表中所有的字段

4)select子句  指定需要通过查询返回的表的列.其语法如下: select [all | distinct ] [ top n ] < select_list>

5)top n [persent ] 指明返回查询结果的前n行数据,如果percent关键字指定的话,则返回查询结果的前百分之n行的数据

6)into子句   用于把查询结果存放到一个新建的表中.select...into句式不能与compute子句一起使用.其语法 into new_table

7)from子句 

8)where子句

 

    1>比较查询条件 text/ntext和image数据类型不能与比较运算符组合成查询条件.

    2>模式查询条件like  /not like

            通配符

            *   匹配任意字符串

            ?   匹配任意一个字符

            %  由0个或更多个字符组成的任意字符串

            -    任意单个字符

            []   用于指定范围,例如[a - f ] 表示a到f范围内的任何单个字符

            [^]表示指定范围,例如[^a-f]表示a到f范围以外的任何单个字符

   如果用户要查找的数据中本身就包含了通配符,如sql_Mail,就需要使用转义字符来区分通配符与实际存在的字符.

           格式          like 字符匹配串    escape  转义字符

 

            例;查找对象名称为SQL_M开头,il结尾,中间有一个不确定字符的对象
            select * from objects where objecct_name like 'SQL#_M_il' escape '#'

            上例中使用了两个下划线_符号,前一个下划线由于有逃逸字符在其前面作标志,因而被认为是实际存在的下划线字符;后一个下划

            线没有逃逸字符在其前面作标识,因此将它作为通配符

   使用[]来将通配符指定为普通字符

            select * from object where columnl like '%54[%]%'    将返回所有包含54%的字符串

 

9)group by 子句  指定查询结果的分组条件,其语法如下:  group by [ all ]  group_by_expression [ , ......n ]  [ with { cube | rollup } ]

各参数说明      group_by_expression  指明分组条件  通常是一个列名,但不能是列的别名.数据类型为text  ntext   image  或bit类型的列不能作为分组条件

 

all  返回所有可能的查询结果组合,即使此组合中没有任何满足where子句的数据. 分组的统计列如果不满足查询条件,则将由null值构成期数据.all选项不恩与cube或rollup选项同时使用

cube  除了返回由group by子句指定的列外,还返回按组统计的行.返回结果先按分组的第一个条件列排序显示,再按第二个条件列排序显示,以此类推.统计行包括了group by 子句指定那个列的各种组合的数据统计

 

rollup 与cube不同的是,此选项对group by 子句中的列顺序敏感,它只返回第一个分组条件指定的列的统计行,改变列的顺序会是返回的结果的行数发生变化.

 

10) having 子句   指定分组搜索条件.having子句通常与group by 子句一起使用.text  ntext 和image数据类型不能用于having子句.其语法格式   having < search_condition>     

having子句与where子句很相似,其区别在于其作用的对象不同.where子句作用于表和视图,having子句作用于组

 

11)order by 子句   指定查询结果的排序方式   语法格式  order by { order_by_expression [asc | desc ] } [ , ....n]

各参数说明如下:

order_by_expression 指定排序的规则   可以是表或视图的名称或别名.

asc  指明查询结果按升序排列,这是系统默认值

desc  指定查询结果按降序排列

 

例: select top 3 e_name,e_wage from employee order by e_wage desc

12)compute子句   指在查询结果的末尾生成一个汇总数据行,其语法如下: compute { { AVG | COUNT | MAX | SUM } ( expression ) } [,....n ] [ by   expression [ , ... n ] ]

各参数说明如下   avg | count | max | min | sum 以上参数与对应的函数有相同的含义,这些函数均会忽略NULL值且DISTINCT选项不能在此使用

                         expression 指定需要统计的列的名称,此列必须包含与select列表中,且不能用别名. compute子句中也不能使用

                         text     ntext     image 数据类型

 

           汇总函数:  把一列中的值进行汇总计算,返回单值的函数.

           五个预定义的聚合函数

            平均值   avg

            最小值   min

            总和      sum

            最大值    max

            计数       count

            count(*) 把相同的记录个数都找出来

            count(distinct)把不同的记录个数找出来

                             

                              by expression  在查询结果中生成分类统计的行.如果使用此选项,则必须是同时使用ordere by 子句.expression

                              对应order by 子句中的order_by_expression的子集或全集

 

 13)union子句   union操作符将两个或两个以上的查询结果合并成一个结果集.它与使用联接查询合并两个表的列是不同的,使用union操作符合并查询结果需要遵循两个基本规则:  1>列的数目和顺序在所有查询结果中必须是一致的 2>数据类型必须兼容

          语法: select 语句  union  [ all ] select 语句

          注意: 1>使用union子句获得的结果集的字段名称与union运算符之前的select语句结果集中的字段名相同. union运算符之后的select语句结果集的字段名将被忽略.  2>   在默认情况下,union运算符将从最终结果集中删除重复的记录,如果希望最终结果中保留所有的记录,则必须使用all关键字  3> 在使用union运算符时,单独的select语句不能包含其自己的order by

或compute子句.只能在最后一个select语句的后面使用一个order by或compute子句,该子句将适用于最终的组合结果集  4> 若需要对查询结果进行分组以及在分组后对结果使用having子句进行过滤,则必须在单独的select语句中指定group by 和having子句

 

 

 

 

posted @ 2010-08-09 21:15  转航  阅读(686)  评论(0编辑  收藏  举报