MySQL 中数据的检索(四:限制结果集行数)

在进行数据检索的时候有时候需要只检索结果集中的部分行,比如说“检索成绩排前三名的学生”、“检索工资水平排在第3位到第7位的员工信息”,这种功能被称为“限制结果集行数”。

一、MySQL 中
MySQL 中提供了 LIMIT 关键字用来限制返回的结果集,LIMIT 放在 SELECT 语句的最后位置,
语法为 “LIMIT 首行行号,要返回的结果集的最大数目”

SELECT * FROM T_Employee ORDER BY FSalary DESC LIMIT 2,5 #返回按照工资降序排列的从第二行开始(行号从0开始)的最多五条记录

SELECT * FROM T_Employee ORDER BY FSalary DESC LIMIT 0,5 #返回按照工资降序排列的前五条记录

二、MSSQLServer2000 中
MSSQLServer2000 中提供了 TOP 关键字用来返回结果集中的前N条记录,
语法为 “SELECT TOP 限制结果集数目字段列表SELECT语句其余部分”

select top 5 * from T_Employee order by FSalary Desc #检索工资水平排在前五位(按照工资从高到低)的员工信息

MSSQLServer2000 没有直接提供返回提供“检索从第5行开始的10条数据”、“检索第五行至第十二行的数据”等这样的取区间范围的功能。只能采用其他方法来变通实现,最常使用的方法就是用 “子查询”,
比如要实现检索按照工资从高到低排序检索从第六名开始一共三个人的信息,那么就可以首先将前五名的主键取出来,在检索的时候检索排除了这五名员工的前三个人。
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

二、MSSQLServer2005 及以后的版本
MSSQLServer2005 及以后的版本兼容 TOP 关键字。且提供了“窗口函数 ROW_NUMBER()” 来更好的限制结果集行数的功能

ROW_NUMBER() 函数可以计算每一行数据在结果集中的行号(从1开始计数)
其语法为:
ROW_NUMBER OVER(排序规则)

SELECT ROW_NUMBER() OVER(ORDER BY FSalary),FNumber,FName,FSalary,FAge
FROM T_Employee #得到的结果中第一列的数据就是通过 ROW_NUMBER() 计算出来的行号

开窗函数 ROW_NUMBER() 只能出现在 SELECT 或 ORDER BY 子句中,不能用在 WHERE 语句中。
SELECT * FROM
(
SELECT ROW_NUMBER() OVER(ORDER BY FSalary DESC) AS rownum,
FNumber,FName,FSalary,FAge FROM T_Employee
) AS a
WHERE a.rownum>=3 AND a.rownum<=5 #返回第3行到第5行的数据(按照工资降序)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值