--创建表
create table T_NEWS
(
ID NUMBER,
N_TYPE VARCHAR2(20),
N_TITLE VARCHAR2(30),
N_COUNT NUMBER
)
--插入数据
insert into T_NEWS (ID, N_TYPE, N_TITLE, N_COUNT)
values (1, 'IT', '爱it1', 100);
insert into T_NEWS (ID, N_TYPE, N_TITLE, N_COUNT)
values (2, '体育', '爱体育1', 10);
insert into T_NEWS (ID, N_TYPE, N_TITLE, N_COUNT)
values (3, '体育', '爱体育2', 30);
insert into T_NEWS (ID, N_TYPE, N_TITLE, N_COUNT)
values (4, 'IT', '爱it2', 300);
insert into T_NEWS (ID, N_TYPE, N_TITLE, N_COUNT)
values (5, 'IT', '爱it3', 200);
insert into T_NEWS (ID, N_TYPE, N_TITLE, N_COUNT)
values (6, '体育', '爱体育3', 20);
insert into T_NEWS (ID, N_TYPE, N_TITLE, N_COUNT)
values (7, '体育', '爱体育4', 60);
commit;
--分页 row_number,不是rownum
--根据n_count从大到小排列,每页3条
SELECT ROWNUM r,t.* FROM t_news t
WHERE ROWNUM<=3
ORDER BY t.n_count DESC
--问题:为什么order by以后,行号是乱的?
SELECT ROWNUM r,t.* FROM t_news t
--原因:先分配了行号,再根据n_count排序
--所以必须排序,再生成行号
SELECT ROWNUM r,t.* FROM (
SELECT t.* FROM t_news t ORDER BY t.n_count DESC ) t
--分页
--err
SELECT ROWNUM r,t.* FROM (
SELECT t.* FROM t_news t ORDER BY t.n_count DESC ) t
WHERE r between 1 AND 3
--第1页
SELECT ROWNUM r,t.* FROM (
SELECT t.* FROM t_news t ORDER BY t.n_count DESC ) t
WHERE ROWNUM between 1 AND 3
--第2页
SELECT ROWNUM r,t.* FROM (
SELECT t.* FROM t_news t ORDER BY t.n_count DESC ) t
WHERE ROWNUM between 4 AND 6
--error: ROWNUM必须从1开始!
SELECT k.* FROM (
SELECT ROWNUM r,t.* FROM (
SELECT t.* FROM t_news t ORDER BY t.n_count DESC ) t
) k
WHERE r BETWEEN 4 AND 6
-------第二步:我用row_number() over()函数
select t2.*
from (select t.*, row_number() over(order by t.n_count desc) orderNumber
from t_news t
order by t.n_count desc) t2
where orderNumber between 1and 3;
分享到:
相关推荐
Oracle数据库中的`row_number() over()`分析函数是一个非常实用的工具,用于为数据集中的每一行分配一个唯一的整数,这个数字基于指定的排序条件。在处理大数据集时,它可以帮助我们进行分页、排名或者在复杂的查询...
row_number()over(partition by col1 order by col2)表示根据col1分组,在分组内部根据col2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的)。 与rownum的区别在于:使用rownum进行排序的...
在Oracle数据库中,`ROWNUM` 和 `ROW_NUMBER()` 是两个不同的概念,它们在处理结果集的排序和分页方面有着显著的区别。 首先,`ROWNUM` 是Oracle数据库中的一个伪列,它在查询执行的过程中动态生成。当查询执行时,...
Oracle数据库中的`row_number() over()`函数是一种窗口函数,它在处理数据分页时非常有用。这个函数可以为查询结果集中的每一行分配一个唯一的行号,这些行号基于一个指定的排序规则。在此场景中,我们将探讨如何...
在其他数据库系统中,如Oracle,`ROW_NUMBER()`的使用方式类似,但语法细节可能有所不同。例如,在Oracle中,可以使用`ROWNUM`函数,但它有一些不同的行为和限制。 性能方面,`ROW_NUMBER()`通常比传统的`TOP`或`...
Oracle 支持多种分页方式,包括三层嵌套分页、ROW_NUMBER() 函数分页及 ROWNUM 控制最大条数的方法。 1. **三层嵌套分页**: ```sql SELECT * FROM ( SELECT row_.*, ROWNUM as rownum FROM ( SELECT sid ...
总结,Oracle 存储过程中的分页实现有很多种方式,包括ROWNUM、ROW_NUMBER()、CTE、FETCH FIRST子句,以及JOIN和游标等。选择哪种方法取决于具体的需求,如数据库版本、性能需求、查询复杂性等因素。正确使用分页...
### Oracle分析函数详解:row_number() over 在Oracle数据库中,分析函数(Analytic Functions)是一种强大而灵活的数据处理工具,它们能够在查询结果集中对每一行数据进行计算,而不像传统的聚合函数那样只返回...
在Oracle中,`ROW_NUMBER()`和`ROWNUM`是实现分页查询的两种主要方式。其中,`ROW_NUMBER()`函数是在SQL标准中的窗口函数,它可以为每一行分配一个唯一的行号,而这个行号的顺序可以基于某一列的排序规则。`ROWNUM`...
通过上述介绍,我们可以看出虽然Oracle不支持直接的`SELECT TOP`语法,但通过使用`ROWNUM`和`ROW_NUMBER()`窗口函数可以轻松地实现类似的功能。这两种方法各有优缺点,具体使用哪种取决于实际需求以及性能考量。例如...
Oracle数据库中的分析函数是SQL查询中的强大...总的来说,理解并熟练运用RANK()、ROW_NUMBER()和LAG()等分析函数,能帮助数据库管理员和开发人员更好地处理和分析Oracle数据库中的数据,提高数据处理的准确性和效率。
总的来说,Oracle分页的存储过程是解决大数据量查询的一个有效工具,通过封装ROWNUM或ROW_NUMBER()方法,可以灵活地在不同版本的Oracle数据库中实现高效的分页查询。在使用时,应结合具体的业务需求和数据库环境进行...
在Oracle数据库中,常见的分页查询方法有ROWNUM和ROW_NUMBER()函数,以及使用子查询和连接操作来实现分页。 1. ROWNUM方法: ROWNUM是Oracle中的内置伪列,它会为每一行数据生成一个唯一的数字,从1开始递增。但...
本文将详细介绍如何利用Oracle中的`ROW_NUMBER()`解析函数来实现高效的分页功能,并通过示例对比不同分页方法的优劣。 #### 传统分页方法的问题 1. **ROWNUM方法**: - **原理**:通过`ROWNUM`为结果集中的每一行...
常用的 Oracle 分页查询方法有三种:使用 ROWNUM、使用 ROW_NUMBER() 和使用子查询。 第一种方法:使用 ROWNUM Oracle 的 ROWNUM 函数可以用来实现分页查询。基本格式如下: ```sql SELECT * FROM (SELECT A.*,...
在Oracle数据库中,实现分页查询主要有两种方法:ROWNUM和ROW_NUMBER()函数。 1. ROWNUM方法:这是Oracle早期版本中常用的分页方式。ROWNUM是在查询结果集返回之前生成的一个整数,表示行的顺序。例如,要获取第10...