精华内容
下载资源
问答
  • 分页查询SQL语句

    2012-04-10 19:02:04
    分页查询SQL语句 表结构: DROP TABLE IF EXISTS `zhoufoxcn`.`userlist`; CREATE TABLE `zhoufoxcn`.`userlist` (  `UserId` int(10) unsigned NOT NULL auto_increment,  `UserName` varchar(45) NOT ...

    分页查询SQL语句

    表结构:

    DROP TABLE IF EXISTS `zhoufoxcn`.`userlist`;
    CREATE TABLE  `zhoufoxcn`.`userlist` (
      `UserId` int(10) unsigned NOT NULL auto_increment,
      `UserName` varchar(45) NOT NULL,
      `Age` int(10) unsigned NOT NULL default '10',
      `Sex` tinyint(3) unsigned NOT NULL default '1',
      `Tall` int(10) unsigned NOT NULL,
      `Salary` int(10) unsigned NOT NULL,
      PRIMARY KEY  (`UserId`)
    ) ENGINE=InnoDB AUTO_INCREMENT=694 DEFAULT CHARSET=utf8;


    分页查询从第N条到第M条记录的方法

     

    在 MySQL 中表示为:

    select * from userlist  order by userId limit n,m

     

    MS SQL Server 中 :
    select top (m-n) * from userList where userid not in
    (select top  n userid from userList  order by userid) order by userid

     

    Oracle 中 :
    select * from (select rownum no,* from userlist where rownum<=m) where no>=n;


    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zhoufoxcn/archive/2008/03/12/2174234.aspx 周公

     

     

     

     

     

    Sqlite 数据库分页:

    sql = "select * from FlyCrocodile where "+条件+" order by "+排序+" limit "+要显示多少条记录+" offset "+跳过多少条记录;

    如: select * from flycrocodile limit 15 offset 20  

    意思是说:   从flycrocodile表跳过20条记录选出15条记录

     

    转载:http://hi.baidu.com/honfei/blog/item/89e93f1e7fc7bc14413417e6.html


    展开全文
  • ORACLE分页查询SQL语句(最有效的分页)

    万次阅读 多人点赞 2018-11-01 16:18:24
    ** 一、效率高的写法 ** 1.无ORDER BY排序的写法。...即使查询的数据量再大,也几乎不受影响,速度依然!) SELECT * FROM (SELECT ROWNUM AS rowno, t.* FROM emp t WHERE hire_date BETWEEN TO_DATE ...

    **

    一、效率高的写法

    **
    1.无ORDER BY排序的写法。(效率最高)
    (经过测试,此方法成本最低,只嵌套一层,速度最快!即使查询的数据量再大,也几乎不受影响,速度依然!)

    SELECT *
    
      FROM (SELECT ROWNUM AS rowno, t.*
    
              FROM emp t
    
             WHERE hire_date BETWEEN TO_DATE ('20060501', 'yyyymmdd')
    
                                 AND TO_DATE ('20060731', 'yyyymmdd')
    
               AND ROWNUM <= 20) table_alias
    
     WHERE table_alias.rowno >= 10;
    

    2.有ORDER BY排序的写法。(效率较高)
    (经过测试,此方法随着查询范围的扩大,速度也会越来越慢哦!)

    SELECT *
    
      FROM (SELECT tt.*, ROWNUM AS rowno
    
              FROM (  SELECT t.*
    
                        FROM emp t
    
                       WHERE hire_date BETWEEN TO_DATE ('20060501', 'yyyymmdd')
    
                                           AND TO_DATE ('20060731', 'yyyymmdd')
    
                    ORDER BY create_time DESC, emp_no) tt
    
             WHERE ROWNUM <= 20) table_alias
    
     WHERE table_alias.rowno >= 10;
    

    **

    二、效率垃圾但又似乎很常用的分页写法

    **

    3.无ORDER BY排序的写法。(建议使用方法1代替)
    (此方法随着查询数据量的扩张,速度会越来越慢哦!)

    SELECT *
    
      FROM (SELECT ROWNUM AS rowno, t.*
    
              FROM k_task t
    
             WHERE flight_date BETWEEN TO_DATE ('20060501', 'yyyymmdd')
    
                                   AND TO_DATE ('20060731', 'yyyymmdd')) table_alias
    
     WHERE table_alias.rowno <= 20 AND table_alias.rowno >= 10;
    
    --TABLE_ALIAS.ROWNO  between 10 and 100;
    

    4.有ORDER BY排序的写法.(建议使用方法2代替)
    (此方法随着查询范围的扩大,速度会越来越慢哦!)

    SELECT *
    
      FROM (SELECT tt.*, ROWNUM AS rowno
    
              FROM (  SELECT *
    
                        FROM k_task t
    
                       WHERE flight_date BETWEEN TO_DATE ('20060501', 'yyyymmdd')
    
                                             AND TO_DATE ('20060531', 'yyyymmdd')
    
                    ORDER BY fact_up_time, flight_no) tt) table_alias
    
     WHERE table_alias.rowno BETWEEN 10 AND 20;
    

    5.另类语法。(有ORDER BY写法)
    (语法风格与传统的SQL语法不同,不方便阅读与理解,为规范与统一标准,不推荐使用。)

    WITH partdata AS
    
         (
    
            SELECT ROWNUM AS rowno, tt.*
    
              FROM (  SELECT *
    
                        FROM k_task t
    
                       WHERE flight_date BETWEEN TO_DATE ('20060501', 'yyyymmdd')
    
                                             AND TO_DATE ('20060531', 'yyyymmdd')
    
                    ORDER BY fact_up_time, flight_no) tt
    
             WHERE ROWNUM <= 20)
    
    SELECT *
    
      FROM partdata
    
     WHERE rowno >= 10;
    
     
    
    --6另类语法 。(无ORDER BY写法)
    
    WITH partdata AS
    
         (
    
            SELECT ROWNUM AS rowno, t.*
    
              FROM k_task t
    
             WHERE flight_date BETWEEN TO_DATE ('20060501', 'yyyymmdd')
    
                                   AND TO_DATE ('20060531', 'yyyymmdd')
    
               AND ROWNUM <= 20)
    
    SELECT *
    
      FROM partdata
    
     WHERE rowno >= 10;
    

    **

    三、分析

    **
    Oracle的分页查询语句基本上可以按照本文给出的格式来进行套用。

    分页查询格式:

    SELECT *
    
      FROM (SELECT a.*, ROWNUM rn
    
              FROM (SELECT *
    
                      FROM table_name) a
    
             WHERE ROWNUM <= 40)
    
     WHERE rn >= 21
    

    其中最内层的查询SELECT * FROM TABLE_NAME表示不进行翻页的原始查询语句。ROWNUM <= 40和RN >= 21控制分页查询的每页的范围。

    上面给出的这个分页查询语句,在大多数情况拥有较高的效率。分页的目的就是控制输出结果集大小,将结果尽快的返回。在上面的分页查询语句中,这种考虑主要体现在WHERE ROWNUM <= 40这句上。

    选择第21到40条记录存在两种方法,一种是上面例子中展示的在查询的第二层通过ROWNUM <= 40来控制最大值,在查询的最外层控制最小值。而另一种方式是去掉查询第二层的WHERE ROWNUM <= 40语句,在查询的最外层控制分页的最小值和最大值。这是,查询语句如下:

    SELECT *
    
      FROM (SELECT a.*, ROWNUM rn
    
              FROM (SELECT *
    
                      FROM table_name) a)
    
     WHERE rn BETWEEN 21 AND 40
    

    对比这两种写法,绝大多数的情况下,第一个查询的效率比第二个高得多。

    这是由于CBO优化模式下,Oracle可以将外层的查询条件推到内层查询中,以提高内层查询的执行效率。对于第一个查询语句,第二层的查询条件WHERE ROWNUM <= 40就可以被Oracle推入到内层查询中,这样Oracle查询的结果一旦超过了ROWNUM限制条件,就终止查询将结果返回了。

    而第二个查询语句,由于查询条件BETWEEN 21 AND 40是存在于查询的第三层,而Oracle无法将第三层的查询条件推到最内层(即使推到最内层也没有意义,因为最内层查询不知道RN代表什么)。因此,对于第二个查询语句,Oracle最内层返回给中间层的是所有满足条件的数据,而中间层返回给最外层的也是所有数据。数据的过滤在最外层完成,显然这个效率要比第一个查询低得多。

    上面分析的查询不仅仅是针对单表的简单查询,对于最内层查询是复杂的多表联合查询或最内层查询包含排序的情况一样有效。

    这里就不对包含排序的查询进行说明了,下一篇文章会通过例子来详细说明。

    下面简单讨论一下多表联合的情况。

    对于最常见的等值表连接查询,CBO一般可能会采用两种连接方式NESTED LOOP和HASH JOIN(MERGE JOIN效率比HASH JOIN效率低,一般CBO不会考虑)。在这里,由于使用了分页,因此指定了一个返回的最大记录数,NESTED LOOP在返回记录数超过最大值时可以马上停止并将结果返回给中间层,而HASH JOIN必须处理完所有结果集(MERGE JOIN也是)。那么在大部分的情况下,对于分页查询选择NESTED LOOP作为查询的连接方法具有较高的效率(分页查询的时候绝大部分的情况是查询前几页的数据,越靠后面的页数访问几率越小)。

    因此,如果不介意在系统中使用HINT的话,可以将分页的查询语句改写为:

    SELECT *
    
      FROM (SELECT a.*, ROWNUM rn
    
              FROM (SELECT *
    
                      FROM table_name) a
    
             WHERE ROWNUM <= 40)
    
     WHERE rn >= 21
    
    展开全文
  • /***author blovedr*功能:SQLServer与MySQL中分页查询sql语句示例*日期: 2018年8月17日 10:58*注释: 学习数据库MySQL的点点记录, 谢谢网上各位大神分享经验与资料, 欢迎大神批评与交流。*/分页查询 2018.8.16 ...

    /**

    *author blovedr

    *功能:SQLServer与MySQL中分页查询sql语句示例

    *日期: 2018年8月17日   10:58

    *注释: 学习数据库MySQL的点点记录, 谢谢网上各位大神分享经验与资料, 欢迎大神批评与交流。

    */

    分页查询      2018.8.16   21:39

    SQLServer      OK      2018.8.16   21:53

    --显示第1个到第4个入职的雇员(按时间的先后顺序)

    select top 4 * from order by hiredate

    自注: 显示第一个到第四个入职的员工      SQLServer      OK      2018.8.16   21:53

    select * from emp order by hiredate

    --请显示第5个到第10个入职的雇员(按时间的先后顺序)

    select top 6 * from emp where empno not in

    (select top 4 empno from emp order by hiredate)

    order by hiredate;

    自注:排除4个,再挑6个雇员(输出前6个雇员),就是显示第5个到第10个入职的雇员(按时间的先后顺序)。SQLServer      OK      2018.8.16   22:07

    --请显示第11个到第13个入职的人的信息(按时间的先后顺序)

    select top 3 * from emp where empno not in

    (select top 10 empno from emp order by hiredate)

    order by hiredate;

    自注: 排除10个, 再挑3个雇员(输出前3个雇员), 就是显示第11个到第13个入职的雇员(按时间的先后顺序)。      SQLServer      OK      2018.8.16   22:07

    --请显示第5个到第9个人的信息(按照薪水的高低)      2018.8.16   22:11

    select top 5 * from emp where empno not in

    (select top 4 empno from emp order by sal desc)

    order by sal desc;

    自注: 排除前4个, 剩下再挑5个雇员(输出前5个雇员), 就是显示第5个到第9个人的信息(按照薪水的高低)。      SQLServer      OK      2018.8.16   22:19

    MySQL      OK     2018.8.16   21:53

    -- 显示第1个到第4个入职的雇员(按时间的先后顺序)

    select * from emp order by hiredate limit 0,4;

    select * from emp order by hiredate limit 4;

    自注: 显示第一个到第四个入职的员工(按时间的先后顺序)      MySQL      OK     2018.8.16   21:53

    mysql中关键字limit可实现分页查询,limit后跟两个数字作为参数,

    第一个数字表示从第几行起开始查询,第二个数字表示查询了多少条记录,

    如果此时所查询的记录数小于该数字(第二个数字)时全部显示。

    当第一个数字为0(零)时可以略去不写。    2018.8.16   22:03

    --请显示第5个到第10个入职的雇员(按时间的先后顺序)

    select * from emp order by hiredate limit 4,6;

    自注:显示第五个到第十个入职的员工信息      MySQL      OK     2018.8.16   22:00

    --请显示第11个到第13个入职的人的信息(按时间的先后顺序)

    select * from emp order by hiredate limit 10, 3;      ---ok      2018.8.16   22:09

    --请显示第5个到第9个人的信息(按照薪水的高低)      2018.8.16   22:19

    select * from emp order by sal desc limit 5, 5;      ---ok     2018.8.16   22:09

    --请显示第4个到第9个人的信息(按照薪水的高低)      2018.8.16   22:19

    select * from emp order by sal desc limit 4, 6;      ---ok      2018.8.16   22:24

    展开全文
  • 本文主要向大家介绍了MySQL数据库之Oracle与MySQL的分页查询sql语句格式实例讲解 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助。OracleOracle使用rownum进行分页:SELECT*FROM(SELECTa.*,...

    本文主要向大家介绍了MySQL数据库之Oracle与MySQL的分页查询sql语句格式实例讲解 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助。

    eaafc7f7001dffbb7f01e23282dfcde4.png

    Oracle

    Oracle使用rownum进行分页:

    SELECT *

    FROM (SELECT a.*, ROWNUM rn

    FROM (SELECT * FROM table_name) a

    WHERE ROWNUM <= pageIndex * pageSize)

    WHERE rn > (pageIndex - 1) * pageSize

    其中,pageIndex是页码,pageSize是每页的条数

    MySQL

    MySQL的limit语句是很方便,但是对数据量很大的表不适合直接使用。

    综合考虑下,我们可以利用索引来进行高效地分页查询

    SELECT * FROM table_name

    WHERE id > =(SELECT id from table_name limit (pageIndex-1) * pageSize, 1)

    limit pageSize

    SELECT * FROM table_name a

    JOIN

    (select id from table_name limit (pageIndex-1) * pageSize, pagesize) b

    ON a.id = b.id

    本文由职坐标整理并发布,希望对同学们学习MySQL有所帮助,更多内容请关注职坐标数据库MySQL数据库频道!

    展开全文
  • 分页查询sql语句

    2012-03-27 20:23:16
    写一个实现分页的方法..接受三个参数如下参数.就可以实现返回一个能分页的...这个sql语句可以处理得到一个分页查询sqlserver数据库? 只希望有一个sql语句可以实现 如果没看懂希望可以看看各种数据库各种分页语句
  • oracle分页查询sql语句

    2019-07-28 17:34:42
    –oracle分页查询sql语句 select a.empno, a.ename, a.job, a.mgr, a.hiredate, a.sal, a.comm, a.deptno from emp a where a.ename = 'SMITH' ; –1、无ORDER BY排序的写法。(效率最高) SELECT * ...
  • 语法:select * from table limit [offset,] rows | rows offset offsetmysql分页使用limit,limit 子句可以被用于强制 select 语句返回指定的记录数。limit 接受一个或两个数字参数。参数必须是一个整数常量。如果...
  • Oracle分页查询sql语句

    万次阅读 2016-10-25 14:43:07
    1.oracle中的分页查询sql语句基本可以按照如下的模板来改写:SELECT * FROM (SELECT A.*, ROWNUM RN FROM (SELECT * FROM TABLE_NAME) A WHERE ROWNUM ) WHERE RN > 20 其中的SELECT * FROM TABLE_NAME 表示没有...
  • *功能:SQLServer与MySQL中分页查询sql语句示例 *日期: 2018年8月17日 10:58 *注释: 学习数据库MySQL的点点记录, 谢谢网上各位大神分享经验与资料, 欢迎大神批评与交流。 */ 分页查询 2018.8.16 21:39 ...
  • [关联查询|多表查询](连接查询、子查询、联合查询、图解说明几种常见的连接[联合]查询)一、常用的高级查询语句· 连接查询:(如果条件和结果分布于多张表,使用多表连接)· 子查询:(如果最终结果在一张表中,优先...
  • 本文主要向大家介绍了MySQL数据库之Oracle与MySQL的分页查询sql语句格式实例讲解 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助。OracleOracle使用rownum进行分页:SELECT*FROM(SELECTa.*,...
  • 一:基本的查询语句我们默认在下图表中进行操作操作:查询——新建查询查询列select <列名1>,<列名2>......from<表名>;注:select 列名顺序有序性。select *: 查询出全部列。 为列设定别名 as...
  • Sql查询语句中可以用like关键字和通配符进行模糊查询。1、like语法select 字段 from 表名 where字段 Like 条件准备测试用表,并构造些测试数据。2、--建表语句,建表test_account -- -建表语句,表test_accountDROP ...
  • 一、基本查询语句1.基本查询语句SELECT <列名1>,<列名2>,......FROM <表名>;2.星号(*):查询出全部列SELECT *FROM <表名>;3.为列设定别名SELECT <列名1> as <列名1别名>,<...
  • SQL语句一直贯彻到整个数据库的使用过程,所以显得尤为重要。下面为小伙伴们介绍一些SQL基础查询语句,希望有能力的小伙伴可以查漏补缺,想学习的小伙伴们可以收藏一下。 1、创建数据库CREATE DATABASE databas...
  • 一、基本查询语句1、查询某一列的数据select 姓名,性别from student;2、查询全部列数据select*from student;3、为列设定别名select 姓名 as s_name,性别 as '人类性别'from student;4、删除重复重复数据select ...
  • 分页查询从第N条到第M条记录的方法 在 MySQL 中表示为: select * from userlist order by userId limit n,m MS SQL Server 中 : select top (m-n) * from userList where userid not in (select top n userid ...
  • SQL语句执行顺序结合上图,整理出如下伪SQL查询语句。从这个顺序中我们可以发现,所有的查询语句都是从FROM开始执行的。在实际执行过程中,每个步骤都会为下一个步骤生成一个虚拟表,这个虚拟表将作为下一个执行步骤...
  • SQL语句执行顺序结合上图,整理出如下伪SQL查询语句。从这个顺序中我们可以发现,所有的查询语句都是从 FROM 开始执行的。在实际执行过程中,每个步骤都会为下一个步骤生成一个虚拟表,这个虚拟表将作为下一个执行...
  • 一、视图什么是视图?数据库中储存的是我们所需要的数据,而视图中存放的是...CREATE 首先在“查询编辑器”输入sql语句,点击“视图”,然后选择“刷新”,新的视图表格将会出现在视图中。当我们想要使用视图的时候...
  • * Sql优化 - Oracle数据库 sql优化 - Oracle数据库 Sql优化目的 Sql优化原则 绑定变量 where ...最大的数据吞吐量 更快的相应时间 在有限资源内执行更多任务 使用绑定变量共享sql语句 Sql语句执行过程 1语法检查(synta
  • 这是一篇SQL核心语句的文章,SQL的核心语句我主要写4种,这篇文章写的是数据查询和过滤,文中加上一些案例来辅助理解SQL语句,文章分为以下几个部分:数据查询语句;数据过滤语句;查询结果处理语句;案例;1、数据...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,485
精华内容 2,194
关键字:

分页查询sql语句