在Oracle数据库中
如:user表
ID Name
1 A
4 B
7 C
2 D
5 E
8 F
其中ID是主键,如何先按照ID排序,再检索出第四条到第六条之间的数据?
如:user表
ID Name
1 A
4 B
7 C
2 D
5 E
8 F
其中ID是主键,如何先按照ID排序,再检索出第四条到第六条之间的数据?
解决方案 »
- [Oracle] 一个求汇总时间的问题. . . 求教!
- sqlserver有个中文繁简转换的功能ChineseConverter,oracle有没有类似的
- 高分求教一个字符串验证的问题!
- 如何写日期查询的sql语句?
- ORA-04098:触发器'GISCAR.X_WRITE_CARINFO_LOG' 无效且未通过重新确认
- [Oracle 11g]Win 7 安装时 使用DBCA创建配置数据库时报错
- sql server的存储过程,表等能导到oracle里去么?
- Oracel中的时间设置
- 急请问高手!!
- 哪位有oracle相关电书,请直接发到我的邮箱里,收到便给分
- 关于case when 的用法
- 关于索引
select *
from (select id,Name ,row_number() over(order by id) rn
from basshp) t
where t.rn>=4 and t.rn<=6
SELECT * FROM (SELECT × from user order by id) where rownum <N;
第四条到第六条之间的数据:
select *
from (select id,name,row_number() over(order by id) rn
from user) t
where t.rn>=4 and t.rn<=6
select t.* from (select *,rownum num from user order by id) t where t.num>=4 and t.num <=6
select * from (select user.*,rownum num from user order by id) t where t.num>=4 and t.num <=6
1楼的没问题
SQL> select * from scott.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
7839 KING PRESIDENT 17-11る-81 5000 10
7844 TURNER SALESMAN 7698 08-9る -81 1500 0 30
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匡 12 SQL> select empno,rownum rn from scott.emp order by empno; EMPNO RN
---------- ----------
7369 1
7499 2
7521 3
7566 4
7654 5
7698 6
7782 7
7839 8
7844 9
7900 10
7902 11
7934 12匡 12 SQL> select * from (select empno,rownum rn from scott.emp order by empno) t
2 where t.rn between 4 and 6; EMPNO RN
---------- ----------
7566 4
7654 5
7698 6SQL>
不过还是不明白 按理说数据结果集应该是:5,7,8.
user表中id为7的rownum=3 怎么会在4和6之间呢?
---------- ----------
7369 1
7499 2
7521 3
7566 4
7654 5
7698 6
7782 7
7839 8
7844 9
7900 10
7902 11
7934 12匡 12 SQL> select * from (select empno,rownum rn from scott.emp order by empno) t
2 where t.rn between 4 and 6; EMPNO RN
---------- ----------
7566 4
7654 5
7698 6SQL>
这个rownum显然是按顺序的
如果变成这样:
EMPNO RN
---------- ----------
7369 4
7499 5
7521 6
7566 1
7654 2
7698 3
7782 7
7839 8
7844 9
7900 10
7902 11
7934 12
你说得到的结果应该是前三条数据!!!!!!
---------- ----------
7369 1
7499 2
7521 3
7566 4
7654 5
7698 6
7782 7
7839 8
7844 9
7900 10
7902 11
7934 12 select * from (select empno,rownum rn from scott.emp order by empno) t
2 where t.rn between 4 and 6;
是从上面的结果中选4--6,不会出现别的情况
select id,val,rownum num from test order by id)t where t.num>=4 and t.num <=6
这种写法是不对的
select * from test order by id:ID VAL1 val1
2 val2
3 val3
3 valxxx3
4 val4
5 val5
6 val6
7 val7
8 val8
9 val9
10 val10select * from (
select id,val,rownum num from test order by id)t where t.num>=4 and t.num <=6
得到的结果是:
ID VAL NUM4 val4 4
5 val5 5
6 val6 6
应该是
3 valxxx3
4 val4
5 val5
才对啊
SQL> create table test (id number,val varchar2(10));表已创建。SQL> insert into test values(1,'val1');已创建 1 行。SQL> insert into test values(2,'val2');已创建 1 行。SQL> insert into test values(3,'val3');已创建 1 行。SQL> insert into test values(3,'valxxx3');已创建 1 行。SQL> insert into test values(4,'val4');已创建 1 行。SQL> insert into test values(5,'val5');已创建 1 行。SQL> insert into test values(6,'val6');已创建 1 行。SQL> insert into test values(7,'val7');已创建 1 行。SQL> insert into test values(8,'val8');已创建 1 行。SQL> insert into test values(9,'val9');已创建 1 行。SQL> insert into test values(10,'val10');已创建 1 行。SQL> commit;提交完成。SQL> select * from test order by id; ID VAL
--------- --------------------
1 val1
2 val2
3 val3
3 valxxx3
4 val4
5 val5
6 val6
7 val7
8 val8
9 val9
10 val10已选择11行。SQL> select * from (
2 select id,val,rownum num from test order by id)t where t.num>=4 and t.num <=6
3 ; ID VAL NUM
--------- -------------------- ---------
3 valxxx3 4
4 val4 5
5 val5 6SQL>
希望哪位好心人 帮帮忙 按照我的表 执行下!
我这oracle正在下载中 没法试验 希望可以快点找到正确答案 然后结贴散分!
SELECT ID,NAME FROM(select ROWNUM R,ID,NAME from (select * from users order by id)) WHERE R<=6
AND R>=4;