分页sql如何写?谢谢了

csm810902 2010-04-08 11:13:10
已知oracle表结构如下:
CREATE TABLE person
(

id number(5) NOT NULL PRIMARY KEY ,
pid varchar2(32) ,
name varchar2(32) ,
password varchar2(20)
)

表里有好多条记录,求一条语句,能查出表中第11条记录到第20条记录,谢谢了。
...全文
142 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
kxning 2010-04-11
  • 打赏
  • 举报
回复
看了楼上各位的写法,把过程贴出来大家学习一下。


SQL> select * from emp;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
7369 SMITH CLERK 7902 17-12月-80 800 20
7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30
7566 JONES MANAGER 7839 02-4月 -81 2975 20
7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30
7698 BLAKE MANAGER 7839 01-5月 -81 2850 30
7782 CLARK MANAGER 7839 09-6月 -81 2450 10
7788 SCOTT ANALYST 7566 19-4月 -87 3000 20
7839 KING PRESIDENT 17-11月-81 5000 10
7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30
7876 ADAMS CLERK 7788 23-5月 -87 1100 20

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
7900 JAMES CLERK 7698 03-12月-81 950 30
7902 FORD ANALYST 7566 03-12月-81 3000 20
7934 MILLER CLERK 7782 23-1月 -82 1300 10

已选择14行。

SQL> select * from emp
2 where rownum<=10
3 minus
4 select * from emp
5 where rownum<=5
6 /

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
7698 BLAKE MANAGER 7839 01-5月 -81 2850 30
7782 CLARK MANAGER 7839 09-6月 -81 2450 10
7788 SCOTT ANALYST 7566 19-4月 -87 3000 20
7839 KING PRESIDENT 17-11月-81 5000 10
7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30



SQL> select * from (select t.*,rownum rn from emp t) where rn between 6 and 10;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO RN
---------- ---------- --------- ---------- -------------- ---------- ---------- ---------- ----------
7698 BLAKE MANAGER 7839 01-5月 -81 2850 30 6
7782 CLARK MANAGER 7839 09-6月 -81 2450 10 7
7788 SCOTT ANALYST 7566 19-4月 -87 3000 20 8
7839 KING PRESIDENT 17-11月-81 5000 10 9
7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30 10

SQL>

--下面的写法不行
SQL> select * from (select *,rownum rn from emp) where rn between 5 and 10;
select * from (select *,rownum rn from emp) where rn between 5 and 10
*
第 1 行出现错误:
ORA-00923: FROM keyword not found where expected
mars199 2010-04-09
  • 打赏
  • 举报
回复
正解,RowNumber
心中的彩虹 2010-04-09
  • 打赏
  • 举报
回复


select * from
(select a.*,rownum rn from (select * from person) a)
where rn between 11 and 20

心中的彩虹 2010-04-09
  • 打赏
  • 举报
回复


select id,pid,name,password
(select id,pid,name,password,row_number() over(partition by id order by id) rn
from person) a
where rn between 11 and 20

select * from (select *,rownum rn
from person
where rownum<=20) a
where rn>=11


Leshami 2010-04-09
  • 打赏
  • 举报
回复
向大家学习了
sxq129601 2010-04-09
  • 打赏
  • 举报
回复
Ding TOO
ORHCLE 2010-04-09
  • 打赏
  • 举报
回复
Ding
firandiir 2010-04-09
  • 打赏
  • 举报
回复
3楼讲的好
顶下
zhangwonderful 2010-04-09
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 tangren 的回复:]

SQL code
--一般分页都要排序,假设按id排序
SELECT id, pid, NAME, password
FROM (SELECT t.*, rownum rn
FROM (SELECT * FROM person t ORDER BY id) t
WHERE rownum <= 20)
WHERE rn >= 10;
[/Quote]
支持
gll0809 2010-04-09
  • 打赏
  • 举报
回复
顶楼上!
liqzhangq 2010-04-09
  • 打赏
  • 举报
回复
顶一下
新建oracle QQ 群
群号:54775466
欢迎爱好者积极者 入群一起探讨。
vampire1129 2010-04-09
  • 打赏
  • 举报
回复
SELECT *
FROM (SELECT ROWNUM AS pagesortid, temp_exppagequery.*
FROM (select * from person) temp_exppagequery)
WHERE pagesortid > 0 AND pagesortid <= 10;
crazypeter2005 2010-04-08
  • 打赏
  • 举报
回复
正解,RowNumber
crazypeter2005 2010-04-08
  • 打赏
  • 举报
回复
正解,RowNumber
tangren 2010-04-08
  • 打赏
  • 举报
回复
--一般分页都要排序,假设按id排序
SELECT id, pid, NAME, password
FROM (SELECT t.*, rownum rn
FROM (SELECT * FROM person t ORDER BY id) t
WHERE rownum <= 20)
WHERE rn >= 10;
ujjixcige 2010-04-08
  • 打赏
  • 举报
回复
oracle中的rownum字段是记录行数的,但是是个虚字段,不能用大于,如当你的条件是rownum > 10的时候,它先从1开始判断,记录1不符合条件,被排除,这时记录2就变成rownum = 1了,所以用>1的rownum会变成所有记录都不符合条件
一般用三层select套用,把rownum用别名变成一个实际列字段来处理,当然如果只是要找记录<的,可以直接用,只要不用>什么都无所谓
duqiangcise 2010-04-08
  • 打赏
  • 举报
回复
SELECT * FROM PERSON
WHERE ROWNUM <=20
MINUS
SELECT * FORM PERSON
WHERE ROWNUM<11;

SELECT *
FROM (
SELECT *,ROWNUM RN
FROM PERSON
)WHERE RN BETWEEN 11 AND 20;
computermajorsmc 2010-04-08
  • 打赏
  • 举报
回复
好问题,可是我也一时想不出来呢,接分洛。。。。。。。。。。。

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧