`
hanjian861202
  • 浏览: 165039 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类
最新评论

Sql:查询前几条记录yu分页的SQL语句

阅读更多
SQLServer,Oracle,MySQL查询前几条记录的SQL语句:

 

SQLServer: select top 10 from table;

Oracle: select * from table where rownum<=10;

MySql: select * from table limit 10.

========================================================================

 

分页查询:

sql sercer:not in 、max()、row_number 三种

http://topic.csdn.net/u/20100617/04/80d1bd99-2e1c-4083-ad87-72bf706cb536.html

Mysql:select * from table order by column limit 0,10;

Oracle:SELECT * FROM (SELECT a.*, ROWNUM rn FROM (select * from t order by detail) ) WHERE rn >= 10 AND rn <= 20
这条语句即是输出第10到第20条纪录,这里之所以用rownum rn,是把rownum转成实例,因为rownum本身只能用 <=的比较方式,只有转成实列,这样就可做 >=的比较了。

 

 在实际用途中,常常会要求取最近的几条纪录,这就需要先对纪录进行排序后再取rownum <=
一般常见的
SELECT * FROM (SELECT a.* FROM torderdetail a ORDER BY order_date DESC) WHERE ROWNUM <= 10
而在CSDN曾经发生过讨论,关于取近的10条纪录,有人给出这样的语句
SELECT a.* FROM torderdetail a WHERE ROWNUM <= 10 ORDER BY order_date DESC
之所以会出现这样的语句,主要是从效率上的考虑,前面条语句,是要进行全表扫描后再排序,然后再取10条纪录,后一条语句则不会全表扫描,只会取出10条纪录,很明显后条语句的效率会高许多。
那为什么会有争议呢,那就在于在执行顺序上争议,是先执行排序取10条纪录,还是取10条纪录,再排序呢?两种顺序取出来的结果是截然相反的,先排序再取10条,就是取最近的10条,而先取10条,再排序,则取出的最早的10条纪录。对于此语句,普遍的认为执行顺序是先取10条纪录再排序的。所以此语句应该是错误。但实际上并非如此,此语句的执行顺序和order by的字段有关系,如果你order by 的字段是pk,则是先排序,再取10条(速度比第一种语句快),而排序字段不是PK 时,是先取10条再排序,此时结果就与要求不一样了,所以第二种写法一定要在排序字段是主键的情况下才能保证结果正确。

====================================================================================

Oracle Connect By用法,实现递归查询:

http://shqkm.blog.163.com/blog/static/794804172010323102545265/

分享到:
评论

相关推荐

    springmvc+mybatis+分页整合

    MyBatis是一个轻量级的持久层框架,它允许开发者将SQL语句与Java代码直接结合,避免了传统的DAO层繁琐的手动编写SQL和参数绑定。MyBatis的核心是SqlSessionFactory,它负责创建SqlSession对象,而SqlSession则是执行...

    C# DBHelper类

    - `ExecutePagedQuery(string sql, int pageSize, int currentPage, out int totalCount, params SqlParameter[] parameters)`: 这个方法可以实现分页查询,同时返回总记录数,用于创建数据网格或其他UI组件的分页...

    工具自动生成mapper(GeneratorSqlmap)

    如果需要对用户表进行更复杂的操作,如根据条件分页查询,我们可以在已生成的基础之上添加新的方法和SQL语句。 在实际项目中,我们还可以结合MyBatis的注解模式,使代码更加简洁。此外,GeneratorSqlmap工具往往...

    用JDBC连接OpenGauss Postgresql 实现增删改查功能的图书管理系统

    连接建立后,我们可以使用`Statement`或`PreparedStatement`对象执行SQL语句。为了实现图书管理系统的增删改查功能,我们需要掌握以下SQL操作: 1. **增加(Insert)**:使用`PreparedStatement`来插入新数据,因为...

    自己用JavaScript写的根据数据库名和字段自动生成java后台代码(二)

    - 为每个方法生成相应的SQL语句,可能需要考虑条件判断、分页等复杂逻辑。 - 将生成的代码写入到指定的Java文件中。 标签"JavaScript"提示我们,这个工具是使用JavaScript编写的,这可能是通过Node.js的模块和库来...

    mybatisplus 生成代码

    - Mapper XML文件:包含了SQL语句,与Mapper接口一一对应。 - Service接口:定义了业务逻辑方法,通常是对Mapper接口的进一步封装。 - ServiceImpl实现类:实现了Service接口中的所有方法,调用Mapper接口进行数据...

    校园活动发布平台

    SQL语句用于操作数据,而Struts2框架则通过DAO(Data Access Object)层来封装这些操作,实现业务逻辑与数据访问的解耦。 再来看看Android客户端部分。Android是一种开源的移动设备操作系统,主要应用于智能手机和...

Global site tag (gtag.js) - Google Analytics