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行的数据(按照工资降序)
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行的数据(按照工资降序)
相关文章推荐
- SQL 5 限制结果集行数(MySQL & Oracle)
- Mybatis使用MySQL模糊查询时输入中文检索不到结果怎么办
- mysql GROUP_CONCAT 用法;修改数据库中group_concat的返回结果的长度限制
- mysql常用基础操作语法(六)--对数据排序和限制结果数量的条件查询【命令行模式】
- JDBC连接mysql获取结果集行数
- Mysql对检索结果进行处理后返回以及在列上使用函数
- 各种数据库限制结果集行数总结
- 【Mysql基础】使用limit限制结果集的位置和大小
- mysql,实现数据库检索结果添加自增的序号
- MySQL 中数据的检索(一:select 语句的基本用法)
- MySQL 中数据的检索(二:高级数据过滤)
- 数据库限制结果集行数(可用于分页)
- Mysql对检索结果进行汇总COUNT,AVG,MIN,MAX,SUM
- MySQL 中数据的检索(三:数据分组)
- MySQL 中数据的检索(五:抑制数据重复)
- MySQL使用LIMIT限制查询结果的数量
- 流行数据库SQL差异分析之“限制结果集行数”
- MySQL 中数据的检索(六:计算字段)
- Mysql - SELECT语句中使用LIMIT限制结果.
- MySQL 中数据的检索(七:不从实体表中取的数据)