`

Order by、Rownum、Rowid的相互影响

阅读更多
Select SITE,REACINFO From TblWorldCupReac 
Where To_char(REACDATE,'yyyy-mm-dd') = To_char(sysdate,'yyyy-mm-dd')
And SITE > 0
And rownum < 2;


Select SITE,REACINFO
From 
( 
    Select SITE,REACINFO 
    From TblWorldCupReac 
    Where To_char(REACDATE,'yyyy-mm-dd') = To_char(sysdate,'yyyy-mm-dd')
    Order by SITE desc
)
Where Rownum < 2;



Select * From EMP Where SAL > 1500;

     EMPNO        SAL
---------- ----------
      7499       1600   !
      7566       2975   !
      7698       2850   !
      7782       2450   !
      7788       3000
      7839       5000
      7902       3000


可以得出结论,表默认是用Rowid来排序,EMPNO有序,SAL列无序。

Select * From EMP Where SAL > 1500 And Rownum < 4;

     EMPNO        SAL
---------- ----------
      7499       1600
      7566       2975
      7698       2850

取前几行的依据是Rowid。

Select * From EMP Where SAL > 1500 And Rownum < 4 Order by SAL;

     EMPNO        SAL
---------- ----------
      7499       1600
      7698       2850
      7566       2975

可以看出,Order by 是在Rownum之后才发挥作用的。

结论:
    Oracle默认使用Rowid(Rowid与主键的值无关)排序;
    Order by 在Rownum 之后起作用;
    如想取某列排序后的前几条,再来个嵌套的Select Rownum < X

PS:数据只是建立在偶尔的观察,故结论也只是偶尔现象,仅供参考……

分享到:
评论

相关推荐

    在oracle中灵活使用Rownum和rowId

    SELECT ROWID, ROWNUM, MONTH, SELL FROM SALE ORDER BY ROWID; ``` 此查询将返回根据 `ROWID` 排序的结果,可以看到 `ROWID` 与每条记录的实际位置有关,而不是根据 `MONTH` 列的值: ```plaintext ROWID ROWNUM ...

    oracle_SQL中rowid与rownum的使用

    例如,当我们需要根据行号获取特定行的数据,而又不希望影响其他查询时,可以先使用`ROWNUM`筛选出行号,再用`ROWID`定位具体行。 四、ROWNUM使用技巧 1. **分页查询**:通常用于实现分页功能,例如`SELECT * FROM ...

    rowid与rownumber

    rowid 是相对不变的,除非使用 order by 语句,否则 rowid 的值将保持不变。 二、rownum 概念 rownum 是 Oracle 数据库中的另一个虚列,用于标示 SQL 语句的输出结果排序。rownum 是一个动态的值,取决于 SQL 语句...

    oracle_SQL-rowid--rownum.zip_oracle

    需要注意的是,`ROWNUM`是在查询执行过程中动态生成的,并且在`ORDER BY`子句之前被计算。这意味着,如果不配合`ORDER BY`,`ROWNUM`的值可能不是预期的顺序。 **ROWID与ROWNUM的区别** - `ROWID`是物理地址,而`...

    Oracle数据库中ORDER BY排序和查询按IN条件的顺序输出

    在文中提到的例子中,即使为列添加了索引,`ORDER BY`操作仍然没有按照预期进行,这主要是因为`ROWNUM`不是一个稳定的排序依据,它只是表示查询结果集的顺序,而不是数据本身的物理存储顺序。 `ROWID`是Oracle...

    oracle的分页查询

    Oracle 的分页查询 ...Oracle 中的分页查询可以使用 ROWNUM 伪列和 ORDER BY 子句来实现,但是需要注意 ROWNUP 伪列的生成机制和 ORDER BY 子句的影响。同时,我们也可以使用 ROWID 列来实现真正的分页查询。

    oracle rownum 学习

    SELECT ROWNUM, ID, NAME FROM STUDENT ORDER BY NAME; ``` 可以看出,ROWNUM并不是按照NAME列来生成的序号。系统是按照记录插入时的顺序给记录排的号,ROWID也是顺序分配的。为了解决这个问题,必须使用子查询。 ...

    oracle-rownum用法

    SELECT ROWNUM, id, name FROM student ORDER BY name; ``` 可以看出,ROWNUM 并不是按照 name 列来生成的序号。系统是按照记录插入时的顺序给记录排的号,ROWID 也是顺序分配的。为了解决这个问题,必须使用子查询...

    17.Oracle伪列1

    - 排序和过滤:rownum可以在ORDER BY之后结合使用,以筛选特定行。 三、rowid的局限性和注意事项 - 兼容性:rowid是Oracle特有的,不适用于其他数据库系统,跨数据库迁移时需注意。 - 物理位置:rowid记录的数据...

    oracle的伪列与分页

    Oracle提供了一些内置的伪列供用户使用,如`ROWID`和`ROWNUM`等,这些伪列可以帮助开发人员更方便地进行查询、排序等操作。 #### 二、ROWID与ROWNUM详解 **ROWID:** - **定义**:ROWID是Oracle中用于唯一标识表中...

    分页的sql总结

    SELECT rowid rid, cid FROM t_xiaoxi ORDER BY cid DESC ) WHERE rownum ) WHERE rn &gt; 9980 ) ORDER BY cid DESC; ``` 在这个例子中,首先通过内层子查询获取前10000条记录的ROWID,然后从中筛选出第9981到...

    Oracle2.pdf

    例如,找出工资最高的五位员工,可以通过先对所有员工按工资降序排列,然后筛选前五个记录:`SELECT * FROM (SELECT * FROM employees ORDER BY salary DESC) WHERE rownum 。 数据分页是数据库操作中的常见需求,...

    EJB3JPA调用原生SQL和函数存储过程[归类].pdf

    select rowid rid from t_xiaoxi order by cid desc ) where rownum ) where rn &gt; 9980 ) order by cid desc; -- 分析函数ROW_NUMBER()分页 select * from ( select t.*, row_number() over(order by cid...

    oracle分页查询

    select t.*, t.rowid from t_stu t order by t.s_birthday desc; ``` 这条SQL语句会返回所有记录,并按照`s_birthday`字段降序排列。然而,如果我们要获取第一页(假设每页3条记录)的数据,仅仅使用`WHERE ROWNUM ...

    对Oracle数据库三种分页方法的测试与研究.pdf

    相比于ROWNUM,ROW_NUMBER()可以在查询过程中动态生成,可以根据特定条件(如ORDER BY子句)生成排序后的行号,更适合复杂的分页需求。使用ROW_NUMBER()的分页查询通常需要嵌套查询,以确保行号的正确生成。 **基于...

    sql 标准语法 精华

    若要选取最长匹配项,可以使用 `INSTR()` 函数和 `LENGTH()` 函数结合 `ORDER BY` 和 `ROWNUM`,例如找出与给定字符串最匹配的记录。 10. **日期和字符串转换**: SQL 提供了多种日期格式化选项,如 `TO_CHAR()` ...

    Oracle,mysql,sqlserver等各种数据库的分页方法

    SELECT ROWNUMBER() OVER (ORDER BY id ASC) AS rowid FROM table WHERE rowid ) WHERE rowid &gt; startIndex; ``` ### DB2/AS400分页方法 DB2/AS400版本的DB2提供了一种更简洁的分页方式。 #### 5. 使用`...

    Oracle中实现MySql中limit+SqlServer分页+分页的存储过程

    WHERE rowid NOT IN (SELECT rowid FROM a_matrix_navigation_map WHERE rownum ) AND rownum ; ``` 2. **嵌套查询**: ```sql SELECT * FROM ( SELECT A.*, rownum r FROM ( SELECT * FROM a_matrix_...

Global site tag (gtag.js) - Google Analytics