ORACLE查询排序后的前几条数据(避坑)

今天写一个页面,要求是查询排序后的前五条数据,遇到一个不大不小的坑,特此记录下

说明下:SQL   SERVER中是用top查询前几条数据,ORACLE没有top,但是可以用ROWNUM实现。

我写的语句是:

      SELECT   *   FROM   TABLE_NAME  t  WHERE   ROWNUM  <= 5   ORDER  BY  t.PRICE DESC;

发现查询出来的数据并不是表中价格最高的前五条,而是数据库中前五条记录排序后的结果

 

后改为

      SELECT   *   FROM   (SELECT   *    FROM    TABLE_NAME   t  ORDER  BY   t.PRICE DESC)  WHERE   ROWNUM <= 5;

得到预期的结果。

两者的不同就在于 前者先取出五条数据然后进行排序,后者先将表中所有数据排序,再取出前五条。

 


版权声明:本文为Amazing20原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。