三大数据库,mysql,SQL server,Oracle 如何实现分页查询(详解版)

SQL server:

设置几个分页变量:

pageSize     //每页的记录数
pageNow      //当前所在页

问题:按照singerId 排序,获取第11-15条记录。

第一种方案:

使用select top 和 not in
select top 5 * from singerId where singerid not in (select top 10 singerid from singer order by singerid)
go

第二种方案:

利用id大于多少和select top分页语句:
select top 5 * from singer
where singerid > (select MAX(singerid) from
(select top 10 singerid from singer order by singerid) As t)
order by singerid
go

第三种方案

利用特性 ROW_NUMBER进行分页:
select * from (
 select ROW_NUMBER() OVER (order by singerid) AS s,*
 from singer
 ) AS mytable
 where s between 11 and 15
 go
随机返回N条数据:

top 后面的N是5,代表随机返回5条数据

select top 5 * from singer order by NEWID()
go 

MySQL的分页:

创建一个表:
create table student(
sid int primary key, –编号
sname varchar(20) not null, –姓名
sage int not null –年龄
);

问题:按sid由小到大排序,找出第3条到第8条的记录。

方案:

select * from student order by sid limit 2 (offset)3

注意:limit后面的两个数,分别表示从那条记录算起,查找几条记录,MySQL中记录是从第0条开始算的。

select * from student order by sid limit pageSize*(pageNow -1),pageSize;

语法:

limit pageSize offset pageSize*(pageNum - 1);

Oracle的分页:

简单的分页:

rownum后面的符号,只能是 <,<=。

不能是 >,>=,=。

select  rownum,s.* from song s where rownum <= 10  //查询前10条数据
select * from (select rownum r,s.* from song s) where r > 10 and r <= 20
//查询11-20条数据
基于排序查询:
select * from (select rownum r,s.* from (select * from song s order by songid desc ) t )
where r > 10 and r <= 20

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值