转自:http://bbs.csdn.net/topics/370033478 对于Oracle中分页排序查询语句执行效率的比较分析 作者:lzgame 在工作中我们经常遇到需要在Oracle中进行分页.排序.查询的组合SQL语句,举例来说,通常我们会这样写:(假定表test中id是主键,并且id从1开始没有间断顺序排列) 1. SELECT * FROM ( SELECT id,a1,a2,a3,a4,a5,a6,a7,a8,a9, ROWNUM AS rn FROM test …
Oracle分页查询语句使我们最常用的语句之一,下面就为您介绍的Oracle分页查询语句的用法,如果您对此方面感兴趣的话,不妨一看. Oracle分页查询语句基本上可以按照本文给出的格式来进行套用.Oracle分分页查询格式: SELECT * FROM ( SELECT A.*, ROWNUM RN FROM (SELECT * FROM TABLE_NAME) A WHERE ROWNUM <= 40 ) WHERE RN >= 21 其中最内层的查询SELECT * FROM TABLE…
page --没有order by的查询 -- 嵌套子查询,两次筛选(推荐使用) --SELECT * -- FROM (SELECT ROWNUM AS rowno, t.* -- FROM DONORINFO t -- WHERE t.BIRTHDAY BETWEEN TO_DATE ('19800101', 'yyyymmdd') -- AND TO_DATE ('20060731', 'yyyymmdd') -- AND ROWNUM <= 20*2) table_alias -- WH…
oracle 的分页查询: select * from (select o.*,rownum rn from Persons o) where rn >40 and rn <=60 : mySQL 的分页查询: select o.* from Persons o limit 40,20 ; limit (偏移条数,数据条数) SQLServer :top select top 4 * from order by hiredate 自注: 显示第一个到第…
Oracle的分页: select * from ( select rownum r,a from tabName where rownum <= 20 ) where r > 10 使用到的是rowunm 这是一个标识.给每列前面加上序号. MySQL分页: /*MySQL分页,因为MySQL没有rownum*/ select * from (select rownum r2 ,a.* from (SELECT @rownum:=@rownum+1 as rownum, user.id,u…
1.mysql分页查询 方式1: select * from table order by id limit m, n; 该语句的意思为,查询m+n条记录,去掉前m条,返回后n条记录.无疑该查询能够实现分页功能,但是如果m的值越大,查询的性能会越低(越后面的页数,查询性能越低),因为MySQL同样需要扫描过m+n条记录. 方式2: select * from table where id > #max_id# order by id limit n; 该查询每次会返回n条记录,却无需像方式1扫描…
1.首先在oracle中建包体,用于游标返回当前数据记录集 CREATE OR REPLACE PACKAGE pkg_query AS TYPE cur_query IS REF CURSOR; END pkg_query; 2.在oracle中建存储过程,存储过程名库 PROCEDURE prc_query CREATE OR REPLACE PROCEDURE prc_query (p_tableName in varchar2, --表名 p_strWhere in varchar2,…
Oracle数据库的rownum 在Oracle数据库中,分页方式没有MySql这样简单,它需要依靠rownum来实现.Rownum表示一条记录的行号,值得注意的是它在获取每一行后才赋予.因此,想指定rownum的区间来取得分页数据在一层查询语句中是无法做到的,要分页还要进行一次查询. SELECT * FROM (SELECT A.*, ROWNUM RN FROM (SELECT * FROM TABLE_NAME) A WHERE ROWNUM <= 40)WHERE RN >= 21…
要动态的变化分页查询的条件,比如pageNow 这个变量表示的是当前是第几页, oracle分页有通用写法,假设一页5行 select * from ( select t.*,rownum rn from ( select * from table1 where condition order by column) t ) ) 如果基础查询不需要排序,可以省掉一层嵌套 select * from ( select t.*,rownum rn from table1 t where conditi…
没有Sql Server有top那么好用,但是Oracle含有隐藏的rownum列可以灵活使用,使实现分页效果,pageSize默认10行 方法一: select * from test where id not in ( select id from test where rownum <= 10) and rownum <= 10 order by id /--此方法除去前10行数据,剩下的重新排序,选取前十行,相当于第二页显示 方法二: SELECT * from test where…
Oracle: create table load( id char(200) not null, title varchar2(100) not null, time varchar2(100) not null, def1 varchar2(100), def2 varchar2(200), def3 varchar2(300), def4 varchar2(400), def5 varchar2(500), dr number(10) default 0, ts char(19) defa…
1.常见的分页查询语句: 查询21到40条之间的数据:SELECT *FROM (select UI.*,ROWNUM RN FROM (select * from user_info) AWHERE RN<=40) WHERE RN>21其中ROWNUM是oracle中的伪列,会根据返回的记录生成一个有序列的数字,但是根据序列只会从1开始排序: 2.另外一种写法效率较低: SELECT * FROM ( SELECT A.*, ROWNUM RN FROM (SELECT * FROM TA…
有了上面的基础,相信大家可以完成分页存储过程了,要求,请大家编写一个存储过程,要求可以输入表名.每页显示记录数.当前页.排序字段(deptno降序).返回总记录数,总页数和返回结果集. 把一个字符串,当作sql语句执行,并把查询得到到结果赋给某个变量,语法如下: execute immediate v_sql into myrows: --1.建包,使用游标类型 create or replace package pack1 is type my_cursor is ref cursor; en…
一.创建包 CREATE OR REPLACE PACKAGE PKG_JK_LAB_BASIC IS TYPE CURSOR_TYPE IS REF CURSOR; PROCEDURE SP_GET_PAGINATION ( pi_tableName in varchar2, --表名 pi_where in varchar2, --查询条件 pi_columns in varchar2, --查询列集合 pi_orderColumn in varchar2, --排序的列 pio_curPa…