排序与分页:ORDER BY 子句 和 LIMIT 子句

本文笔记根据【b站 尚硅谷-宋红康 MySQL 课程】整理。笔记和代码存储在我的 GitHub 库中 github.com/isKage/sql-notes


1 排序

为了使数据按照设定的规则排序输出,可以使用 ORDER BY

  • 使用 ORDER BY 字段名 ASC 表示按照 字段 生序 展示

  • 使用 ORDER BY 字段名 DESC 表示按照 字段 降序 展示

  • ORDER BY 位于 SELECT 语句结尾

1.1 按照某一列排序

  • 例如按照 hire_date 升序
1
2
3
4
5
6
7
8
SELECT first_name, email, hire_date
FROM employees
ORDER BY hire_date; # 按照 hire_date 排序输出,默认升序 ASC


SELECT first_name, email, hire_date
FROM employees
ORDER BY hire_date ASC; # 按照 hire_date 升序输出

  • 按照 hire_date 降序
1
2
3
SELECT first_name, email, hire_date
FROM employees
ORDER BY hire_date DESC; # 按照 hire_date 降序输出

  • 列别名同样可以使用
1
2
3
SELECT first_name, salary * 12 AS "annual salary"
FROM employees
ORDER BY "annual salary" DESC; # 按照别名 annual salary 降序

1.2 按照多列排序

根据多个列进行数据行排序,格式为

1
2
3
SELECT1, 列2, 列3
FROM 表名
ORDER BY2, 列4;
  • 排序依据列可以不在展示列中:即 ORDER BY 后的列可以不是 SELECT 后的列,只要是表中的列即可
  • 多列排序,按照从左到右的方式排序 ORDER BY 后面的列,只有前面列存在相同元素时,才会参考后一列进行排序:即先按照 列2 排,如果 列2 各异,则完全按照 列2 拍;否则参考 列4

例如:按照部门降序,聘请日期升序

1
2
3
SELECT last_name, department_id, hire_date
FROM employees
ORDER BY department_id DESC, hire_date ASC;

2 分页

返回特定范围(行)的数据,以免占据页面过多

也可以使用图形化工具,例如 jetBrainsDataGrip 产品

MySQL 中使用 LIMIT 实现分页,格式为

1
LIMIT 起始行数, 行数  -- 从 0 开始计数,起始行数可省略,默认为 0
  • LIMIT 语句放在 SELECT 语句结尾
  • 不同数据库管理系统 DBMS 的语句存在差异

例如:选取前 5 行

1
2
3
4
5
6
7
8
SELECT *
FROM employees
LIMIT 5; -- 前 5 行


SELECT *
FROM employees
LIMIT 0, 5; -- [0, 1, 2, 3, 4] 从第 0 行开始往后查 5 行

例如:选取第 11 到第 15 行数据(从 0 计数则是:从第 10 行到第 14 行)

1
2
3
SELECT *
FROM employees
LIMIT 10, 10; -- [10, 11, 12, 13, 14] 从 0 计数: 从第 10 行到第 14 行

MySQL 8.0中可以使用 LIMIT 3 OFFSET 4 等价于 LIMIT 4, 3