图图虽然面试和笔试的次数有限,但是也发现了一些数据库常问的知识点,这里稍作总结~~
从我第一次面试起,到今天第三次面试,面试官都问了我一个常见的问题:分页。下面简单介绍一下mysql、oracle、SqlServer三种不同数据库的分页方式。
mysql、oracle、SqlServer的分页查询
mysql中的分页使用的是:limit
1. 语法:limit 开始的索引,每页查询的条数;
2. 公式:开始的索引 = (当前的页码 - 1) * 每页显示的条数
-- 每页显示3条记录
SELECT * FROM student LIMIT 0,3; -- 第1页
SELECT * FROM student LIMIT 3,3; -- 第2页
SELECT * FROM student LIMIT 6,3; -- 第3页
3. limit 是一个MySQL"方言" -- 专属MySQL
oracle中分页使用的是:rownum
rownum是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推。
ROWNUM总是从1开始,不管当前的记录是否满足查询结果,ROWNUM返回的值都是1,如果这条记录的值最终满足所有的条件,那么ROWNUM会递加,下一条记录的ROWNUM会返回2,否则下一条记录的ROWNUM仍然返回1。
理解了这一点,就清楚为什么一般的ROWNUM大于某个值或等于某个不为1的值是无法返回结果的,因此对于每条记录的ROWNUM都是1,而ROWNUM为1不满足查询的结果,所以下一条记录的ROWNUM不会递增,仍然是1,因此所有的记录都不满足条件。---------摘抄自 Oracle ROWNUM用法和分页查询总结
在查询的最外层控制分页的最小值和最大值。查询语句如下:
SELECT * FROM
(
SELECT A.*, ROWNUM RN
FROM (SELECT * FROM TABLE_NAME