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语句后面
- _(单个通配符)
SELECT * FROM T_ Employee WHERE FName LIKE '_erry'
以任意字符开头,剩余部分为“erry"
- 要检索长度为4、第3个字符为“n ",其他字符为任意字符
SELECT * FROM T_ Employee WHERE FName LIKE,'__n_'
- %(多字通配符)
SELECT * FROM T_ Employee WHERE FName LIKE’T%’
以“T”开头,长度任意。
- 姓名中包含字母"n”的员工信息
SELECT * FROM T_ Employee WHERE FName LIKE’%n%’
单字符匹配和多字符匹配还可以一起使用。
SELECT * FROM T_ Employee WHERE FName LIKE’%n_'
上面表示:最后一个字符为任意字符、倒数第_个字符为“n " ,长度任意的字符串。
- 集合匹配[](表示匹配集合中的任意一个)(只有MSSQLServer支持)
SELECT * FROM T_Employee WHERE FName LIKE '[SJ]%'
上面代表:以“S”或者“J“开头长度,长度任意
- 否定符"^"(用来对集合取反)(只有MSSQLServer支持)
SELECT * FROM T_Employee WHERE FName LIKE '[^SJ]%'
posted on 2014-10-29 14:28
藤本蔷薇 阅读(3240)
评论(0) 编辑 收藏