一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第12天,点击查看活动详情。
前言
上篇我们学习完了排序的知识。有兴趣的小伙伴可以阅读(# MySQL学习-排序)。
下面开始学习MySQL中的分页。
分页
- 前面我们学习了很多MySQL的知识,篇幅最大的是SELECT语句相关的知识点。包括后续工作中常用的也是查询功能,性能瓶颈往往也发生在查询时,所以要学好查询相关功能。
- 之前我们运行的示例,查询时结果有时候会很多,如果表中数据非常大的话,查询返回的结果也会很多,查看起来不方便,因此我们需要使用分页来进行查找,这样返回的结果是可控的,也方便查看。
- MySQL中分页使用LIMIT来实现。这里需要注意一点,LIMIT语句必须放在整个SELECT语句的最后。
- 使用分页,可以提高查询的效率。如果数据表中的结果只有一条,可以使用LIMIT 1,这样SELECT语句只需要返回一条数据结果即可。这样的好处是SELECT不需要查找整张表,只需要查询到表中的一条符合条件的记录就行。
LIMIT语句
LIMIT语法格式如下:
LIMIT [位置偏移量,] 行数
[位置偏移量,] 参数指示MySQL从哪一行开始显示,是一个可选参数,如果不指定这个参数,将会从表中的第一条记录开始(第一条记录的位置偏移量是0,第二条记录的位置偏移量是1,以此类推)。第二个参数“行数”指示返回的记录数目。
示例一
查询前20条记录
SELECT name
FROM employees
LIMIT 0, 20
查询前20条记录,位置偏移量输入0,起始是0,行数输入20。就可以查出前20条记录。
示例二
查询第2页前20条记录
SELECT name
FROM employees
LIMIT 20, 20
查询第2页,位置偏移量输入20,从第20条开始,行数输入20。就可以查出第2页前20条记录。
示例三
查询第3页前20条记录
SELECT name
FROM employees
LIMIT 40, 20
查询第3页,位置偏移量输入40,从第40条开始,行数输入20。就可以查出第3页前20条记录。
示例四
查询第pageNo页,pageSize条记录
公式:LIMIT (pageNo - 1) * pageSize, pageSize
WHERE,ORDER BY,LIMIT申明顺序
先写WHERE,再写ORDER BY,最后写LIMIT。
示例五
查询第12, 13条数据
SELECT name
FROM employees
LIMIT 11, 2
这里偏移量输入11,从第11条开始取,取2行数据。
MySQL8.0新特性
MySQL8.0也可以使用:LIMIT OFFSET
上面的示例也可以写成:
SELECT name
FROM employees
LIMIT 2 OFFSET 11
这里偏移量在后面,行数在前面。
示例六
查询员工工资最高的员工姓名
SELECT name
FROM employees
ORDER BY salary DESC
LIMIT 0, 1
上面就可以查出工资最高的员工,也可以使用一下方式写:
SELECT name
FROM employees
ORDER BY salary DESC
LIMIT 1
省略掉了0,也可以查出来。
学到这里,排序与分页就学完了,下面做一些练习题:
练习题一
查询员工的姓名,年薪,按照年薪降序,姓名升序显示。
SELECT name, salary * 12 annual_salary
FROM employees
ORDER BY annual_salary DESC, name
练习题二
查询员工工资不在8000到17000的员工的姓名,工资,按照工资降序,显示第21条到40位置的数据。
SELECT name, salary
FROM employees
WHERE salary NOT BETWEEN 8000 AND 17000
ORDER BY salary DESC
LIMIT 20, 20
练习题三
查询邮箱包含e的员工的姓名,邮箱,按照邮箱字节数降序,再按部门号升序。
SELECT name, email
FROM employees
WHERE email LIKE '%e%'
ORDER BY LENGTH(email) DESC, department_id
这里字节数使用了LENGTH方法。
今天就先学到这里,明天继续。