十一、limit(★★★★★)
11.1 limit的作用
将查询结果集的一部分取出来。通常使用在分页查询当中。
示例:
百度默认—>一页只显示10条记录。
分页的作用是为了提高用户的体验,因为一次全部都查出来用户体验感会差,可以一页一页翻着看。
11.2 limit怎么用
# 完整用法
limit startIndex, length
# startIndex:起始下标,length:长度
# 起始下标从0开始
# 缺省用法
limit 5; # 取前5
注意:mysql中limit在order by之后执行!
11.3 案例
按照薪资降序,取出排名在前5名的员工?
# 法1
mysql> select ename, sal
-> from emp
-> order by sal desc
-> limit 5;
+-------+---------+
| ename | sal |
+-------+---------+
| KING | 5000.00 |
| FORD | 3000.00 |
| SCOTT | 3000.00 |
| JONES | 2975.00 |
| BLAKE | 2850.00 |
+-------+---------+
5 rows in set (0.00 sec)
# 法2
mysql> select ename, sal
-> from emp
-> order by sal desc
-> limit 0, 5;
+-------+---------+
| ename | sal |
+-------+---------+
| KING | 5000.00 |
| FORD | 3000.00 |
| SCOTT | 3000.00 |
| JONES | 2975.00 |
| BLAKE | 2850.00 |
+-------+---------+
5 rows in set (0.00 sec)
取出工资排名在[3-5]名的员工?
mysql> select ename, sal
-> from emp
-> order by sal desc
-> limit 2, 3; # 注意,这里是2,3。
+-------+---------+
| ename | sal |
+-------+---------+
| SCOTT | 3000.00 |
| JONES | 2975.00 |
| BLAKE | 2850.00 |
+-------+---------+
3 rows in set (0.00 sec)
# 2表示起始位置从下标2开始,就是第三条记录
# 3表示长度
取出工资排名在[5-9]名的员工?
mysql> select ename,sal
-> from emp
-> order by sal desc
-> limit 4, 5;
+--------+---------+
| ename | sal |
+--------+---------+
| BLAKE | 2850.00 |
| CLARK | 2450.00 |
| ALLEN | 1600.00 |
| TURNER | 1500.00 |
| MILLER | 1300.00 |
+--------+---------+
5 rows in set (0.00 sec)
11.4 分页
如,每页显示3条记录
第1页:limit 0,3 [0 1 2]
第2页:limit 3,3 [3 4 5]
第3页:limit 6,3 [6 7 8]
第4页:limit 9,3 [9 10 11]
公式:
#每页显示pageSize条记录:
第pageNo页:limit(pageNo - 1)*pageSize, pageSize
Java代码:
public static void main(String[] args){
// 用户提交过来一个页码,以及每页显示的记录条数
int pageNo = 5; //第5页
int pageSize = 10; //每页显示10条
int startIndex = (pageNo - 1) * pageSize;
String sql = "select ...limit " + startIndex + ", " + pageSize;
}
11.5 DQL语句大总结:
select ...
from ...
where ...
group by ...
having ...
order by ...
limit ...
# 执行顺序:
1. from
2. where
3. group by
4. having
5. select
6. order by
7. limit ...