数据库限制结果集行数(可用于分页)
2012-07-11 10:42
302 查看
本文是关于几类数据库限制结果集行数的使用方法,是在一本叫《程序员的SQL金典》书中看到的,认为有用,就按照自己的意思总结了一下。
MYSQL:
select * from table_name order by col_namedesc/asc limit startline,counts
select * from
T_Employeeorder by FSalary
desclimit startline,counts
例子:按照工资降序排列的前5条记录:
select * from
T_Employeeorder by FSalary
desclimit 0,5
SQL Server 2000:
select top counts * from table_name orderby col_name desc/asc
select top 5 * fromT_Employee
order by FSalary desc
检索从第六名开始一共3个人的信息:
select top counts * from table_name wherecol_name not in(select top counts col_name from table_name order by col_namedesc/asc) order by col_name desc/asc
select top 3 * fromT_Employee
where FNumber not in (select top
5 FNumber from
T_Employee
orderby FSalary
desc) order by FSalary
desc
SQL Server 2005:
窗口函数row_number over(排序规则)
select row_numberover(order by FSalary
desc),FNumber,FName,FSalary,FAge
from
T_Employee
检索第三行到第五行的数据:
select * from (select row_number over(orderby col_name desc) as
col_alias,colname,…,fromtable_name ) as table_alias where table_alias.col_alias>=startline and table_alias.col_alias<=endline
select * from (select row_number over(orderby FSalary desc) as rownum,
FNumber,FName,FSalary,FAgefrom T_Employee) as a
where a.rownum>=3AND a.rownum<=5
Oracle:
检索第三行到第五行的数据:(同SQL Server2005,但rownum应改为row_num,rownum是oracle的保留字)
select * from (select row_number over(orderby FSalary desc) row_num,
FNumber,FName,FSalary,FAgefrom T_Employee) a
wherea.row_num>=3
AND a.row_num<=5
保留字rownum:结果集中每一行的行号(从1开始),oracle取一定范围内的数据必须借助窗口函数row_number()。
DB2:
(同SQL Server2005和Oracle)
select * from(select
row_number over(orderby FSalary desc) row_num,
FNumber,FName,FSalary,FAgefrom T_Employee) a
wherea.row_num>=3
AND a.row_num<=5
但DB2还提供了fetch关键字用来提取结果集的前n行:(fetchfirst
条数 rows only)
select * fromT_Employee
order by FSalary desc
fetch first 6 rows only
DB2检索从第六名共3个人的信息:
select * from table_name where col_name notin(select col_name from table_name order by col_name desc fetch first countsrows only) order by col_name desc fetch first counts rows only
select *
fromT_Employee where FNumber
not in(select FNumber
from T_Employee order
by FSalary desc fetch first5
rows only) order byFSalary
desc fetch first 3 rows only
MYSQL:
select * from table_name order by col_namedesc/asc limit startline,counts
select * from
T_Employeeorder by FSalary
desclimit startline,counts
例子:按照工资降序排列的前5条记录:
select * from
T_Employeeorder by FSalary
desclimit 0,5
SQL Server 2000:
select top counts * from table_name orderby col_name desc/asc
select top 5 * fromT_Employee
order by FSalary desc
检索从第六名开始一共3个人的信息:
select top counts * from table_name wherecol_name not in(select top counts col_name from table_name order by col_namedesc/asc) order by col_name desc/asc
select top 3 * fromT_Employee
where FNumber not in (select top
5 FNumber from
T_Employee
orderby FSalary
desc) order by FSalary
desc
SQL Server 2005:
窗口函数row_number over(排序规则)
select row_numberover(order by FSalary
desc),FNumber,FName,FSalary,FAge
from
T_Employee
检索第三行到第五行的数据:
select * from (select row_number over(orderby col_name desc) as
col_alias,colname,…,fromtable_name ) as table_alias where table_alias.col_alias>=startline and table_alias.col_alias<=endline
select * from (select row_number over(orderby FSalary desc) as rownum,
FNumber,FName,FSalary,FAgefrom T_Employee) as a
where a.rownum>=3AND a.rownum<=5
Oracle:
检索第三行到第五行的数据:(同SQL Server2005,但rownum应改为row_num,rownum是oracle的保留字)
select * from (select row_number over(orderby FSalary desc) row_num,
FNumber,FName,FSalary,FAgefrom T_Employee) a
wherea.row_num>=3
AND a.row_num<=5
保留字rownum:结果集中每一行的行号(从1开始),oracle取一定范围内的数据必须借助窗口函数row_number()。
DB2:
(同SQL Server2005和Oracle)
select * from(select
row_number over(orderby FSalary desc) row_num,
FNumber,FName,FSalary,FAgefrom T_Employee) a
wherea.row_num>=3
AND a.row_num<=5
但DB2还提供了fetch关键字用来提取结果集的前n行:(fetchfirst
条数 rows only)
select * fromT_Employee
order by FSalary desc
fetch first 6 rows only
DB2检索从第六名共3个人的信息:
select * from table_name where col_name notin(select col_name from table_name order by col_name desc fetch first countsrows only) order by col_name desc fetch first counts rows only
select *
fromT_Employee where FNumber
not in(select FNumber
from T_Employee order
by FSalary desc fetch first5
rows only) order byFSalary
desc fetch first 3 rows only
相关文章推荐
- 各种数据库限制结果集行数总结
- 流行数据库SQL差异分析之“限制结果集行数”
- SQL查询之限制结果集行数(分页)
- SQL 分页限制结果集行数
- [笔记]流行数据库SQL差异分析之“限制结果集行数”
- mysql GROUP_CONCAT 用法;修改数据库中group_concat的返回结果的长度限制
- MongoDB 如何限制结果和分页显示
- sql2008还原数据库失败,因为结果数据库的累积大小超出10240MB许可限制值。
- 数据库查询结果分页原理
- 黑马程序员—学习笔记之SQL数据分组、限制结果集行数
- MySQL 中数据的检索(四:限制结果集行数)
- 如何分页显示数据库查询结果?
- MySQL中数据结果集分页功能的实现方法;数据库查询返回特定结果即分页查询
- 数据库结果太大,PHP超出内存限制
- Swing编程中用于显示数据库查询结果的数据模型
- 修改数据库中group_concat的返回结果的长度限制
- 数据库SQL Server2012笔记(四)——多表查询、子查询、分页查询、用查询结果创建新表和外连接
- MongoDB 如何限制结果和分页显示
- 数据库SQL Server2012笔记(四)——多表查询、子查询、分页查询、用查询结果创建新表和外连接
- 数据库查询结果分页显示思路