现在的位置: 首页 > 数据库 > 正文

【垃圾菜鸟笔记】后台分页的sql语句

2018年05月16日 数据库 ⁄ 共 898字 ⁄ 字号 评论关闭

前两天去一家面试,问到分页sql怎么写的,当时回答两层select 语句  用rownum伪列

然后 让写一下  

select *  from (select rownum row,A.*
        from A)
where row between  ? and ? --这里 ? 我的想法是在java代码中传入起始条数与结束条数,起始条数就是当前页第一条在总的条数中第几条

当时项目经理笃定的告诉我,你这语句绝对执行不了,分页最少需要三层select
刚刚翻起之前写的分页语句

String sql = "SELECT * FROM (SELECT rownum roun,e.emp_id,e.emp_name,e.emp_email,e.emp_phone,e.emp_hiredate,j.job_name,e.emp_salary,d.dept_name "
				+"FROM emp e LEFT OUTER JOIN job j ON e.emp_job_id=j.job_id "
				+"LEFT OUTER JOIN dept d ON e.emp_dept_id=d.dept_id) " 
				+"where roun between ? and ?";

刚刚在网上查找了一下可能是沟通的问题吧,这个语句确实能分页,但是应该不够严谨

SELECT * FROM
(
   SELECT A.*, ROWNUM RN
   FROM (SELECT * FROM TABLE_NAME) A
)
WHERE RN BETWEEN ? AND ?

在找到这段语句的同时 原文作者 又列出了这个

这段会比上面更有效率一些

<pre name="code" class="sql"><pre name="code" class="sql"><pre name="code" class="sql">SELECT * FROM
(
   SELECT A.*, ROWNUM RN
   FROM (SELECT * FROM TABLE_NAME) A--但是还是有些想不通 为什么不在这里直接写表名 非要写一层循环呢,这样不是需要多执行一段代码吗
<span>					</span>--如果需要先排序 再分页的话这样写倒是能想通 但是 不需要排序 直接分页觉得这样会有些...                             WHERE ROWNUM <= 40--控制最大值


)
WHERE RN >= 21--控制最小值



抱歉!评论已关闭.