排序与分页

数据排序

排序规则

  要在一个不明确顺序的查询结果中对行进行排序,可以使用ORDER BY子句,它必须位于 SQL 语句的最后。指定一个表达式或者一个字段名作为排序条件。ORDER BY子句的语法形式如下:

ORDER BY {column, expr, number} [ASC, DESC]

  其中,ORDER BY {column, expr, number}指定需要排序的字段、表达式或序号,ASC 以升序排序,DESC 以降序排序,默认以升序排序。 针对不同的数据类型,其默认升序的含义如下:

单列排序

# 按照雇佣日期升序排序
SELECT job_id, first_name, salary FROM employees ORDER BY hire_date;

# 按照SQL语句中第三个字段排序(即:salary)
SELECT job_id, first_name, salary FROM employees ORDER BY 3;

# 按照雇佣日期降序排序
SELECT job_id, first_name, salary FROM employees ORDER BY hire_date DESC;

多列排序

# 先按照雇佣日期升序排序,再按照薪水降序排序
SELECT job_id, first_name, salary FROM employees ORDER BY hire_date, salary DESC;

提示

多列排序也叫多重排序,即先以一个字段对查询结果进行排序,然后在这个排序的基础上再对另一个字段排序,最终显示经多次排序后的查询结果。

分页

格式:

LIMIT [位置偏移量,] 行数

提示

第一个"位置偏移量"参数指示 MySQL 从哪一行开始显示,是一个可选参数,如果不指定"位置偏移量",将会从表中的第一条记录开始(第一条记录的位置偏移量是 0,第二条记录的位置偏移量是 1,以此类推);第二个参数"行数"指示返回的记录条数。

# 前 10 条记录:
SELECT * FROM 表名 LIMIT 0, 10;
# 或者
SELECT * FROM 表名 LIMIT 10;

# 第 11 至 20 条记录:
SELECT * FROM 表名 LIMIT 10, 10;

# 第 21 至 30 条记录:
SELECT * FROM 表名 LIMIT 20, 10;

MySQL 8.0 中可以使用LIMIT 3 OFFSET 4,意思是获取从第 5 条记录开始后面的 3 条记录,和LIMIT 4, 3返回的结果相同。

分页:

分页显示公式:(当前页数 - 1) * 每页条数, 每页条数

SELECT * FROM table_name LIMIT (pageNo - 1) * pageSize, pageSize;

# 每页10条记录,取第三页的记录
SELECT * FROM table_name LIMIT (3 - 1) * 10, 10;
# 即
SELECT * FROM table_name LIMIT 20, 10;