2016-08-16 Oracle分页功能实现

    xiaoxiao2026-05-25  6

    每天积累一点点,感觉自己又进步了 

    --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;

     

    转载请注明原文地址: https://ju.6miu.com/read-1310046.html
    最新回复(0)