随笔-71  评论-5  文章-0  trackbacks-0
    ROW_NUMBER()帮助更好的限制结果集行数的功能)
   (ROW_NUMBER()函数可以计算每一行数据在结果集中的行号(从1开始计数))

   select ROW_NUMBER() OVER(order by FSalary),FNumber,FName,FSalary,FAge from T_Employee

     开窗函数只能出现在 SELECT 或 ORDER BY 子句中::也就是说ROW_NUMBER()不能用在WHERE语句中.

    select * from (select row_number()over(order by fsalary desc)as rownum,fname,fname,fsalary,fage from t_employee) as a where a.rownum>=3 and a.rownum<=5


       MSSQLServer 2000(提 供 了 TOP 关 键 字 用来 返回 结 果 集 中的 前 N条 记录)

    select top 5 * from T_Employee order by FSalary Desc    表示:按照工资降序排列的前五条记录

检索工资水平排在前五位(按照工资从高到低)的员工信息.
    SELECT top 3 * FROM T_Employee WHERE FNumber NOT IN(SELECT TOP 5 FNumber FROM T_Employee ORDER BY FSalary DESC)ORDER BY FSalary DESC

       Oracle(Oracle中支持窗口函数ROW_NUMBER(),其用法和MSSQLServer2005中相同),不过oracle提供了更方便的特性,用来计算行号
       oracle为每个结果集都默认增加了一个默认的表示行号的列,这个列的名称为rownum(从1开始计数)       

     SELECT * FROM T_Employee WHERE rownum<=6 ORDER BY FSalary Desc

        当进行检索的时候,对于第一条数据,其rownum为1,因为符合“WHERE rownum<=6”所以被放到了检索结果中;当检索到第二条数据的时候,其rownum为2,因为符合“WHERE                          rownum<=6”所以被放到了检索结果中……依次类推,直到第七行。

          ---这是错误的代码 SELECT rownum,FNumber,FName,FSalary,FAge FROM T_Employee WHERE rownum BETWEEN 3 AND 5 ORDER BY FSalary DESC

        当进行检索的时候,对于第一条数据,其rownum为1,因为不符合“WHERE rownumBETWEEN 3 AND 5”,所以没有被放到了检索结果中;当检索到第二条数据的时候,因为第
一条数据没有放到结果集中,所以第二条数据的rownum仍然为1,而不是我们想像的2,所以因为不符合“WHERE rownum<=6”,没有被放到了检索结果中;当检索到第三条数据的时候,
因为第一、二条数据没有放到结果集中,所以第三条数据的rownum仍然为1,而不是我们想像的3,所以因为不符合“WHERE rownum<=6”,没有被放到了检索结果中……


         
DB2也支持row_number(),语法跟mssql和oracle一样,还提供了fetch关键字用来提取前N行..语法为:fetch first 条数 rows only

select * from t_employee order by fsalary desc fetch first 6 rows only --必须注意:fetch字句要放在order by语句后面






        

  1. _(单个通配符)
    SELECT * FROM T_ Employee WHERE FName LIKE '_erry'

    以任意字符开头,剩余部分为“erry"

  2. 要检索长度为4、第3个字符为“n ",其他字符为任意字符
    SELECT * FROM T_ Employee WHERE FName LIKE,'__n_'
  3. %(多字通配符)
    SELECT * FROM T_ Employee WHERE FName LIKE’T%’

    以“T”开头,长度任意。

  4. 姓名中包含字母"n”的员工信息
    SELECT * FROM T_ Employee WHERE FName LIKE’%n%’
  5. 单字符匹配和多字符匹配还可以一起使用。

    SELECT * FROM T_ Employee WHERE FName LIKE’%n_'

    上面表示:最后一个字符为任意字符、倒数第_个字符为“n " ,长度任意的字符串。

  6. 集合匹配[](表示匹配集合中的任意一个)(只有MSSQLServer支持)
    SELECT * FROM T_Employee WHERE FName LIKE '[SJ]%'

    上面代表:以“S”或者“J“开头长度,长度任意

  7. 否定符"^"(用来对集合取反)(只有MSSQLServer支持)
    SELECT * FROM T_Employee WHERE FName LIKE '[^SJ]%'




posted on 2014-10-29 14:28 藤本蔷薇 阅读(3215) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: