您的位置:首页 > 数据库 > MySQL

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

2018-03-21 21:22 260 查看
在进行数据检索的时候有时候需要只检索结果集中的部分行,比如说“检索成绩排前三名的学生”、“检索工资水平排在第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行的数据(按照工资降序)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息