我是靠谱客的博主 现代大侠,最近开发中收集的这篇文章主要介绍MySQL基础篇——第05章 排序与分页MySQL基础篇——第05章 排序与分页,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

MySQL基础篇——第05章 排序与分页

1. 排序数据:ORDER BY

1.1 排序规则

  • 使用 ORDER BY 对查询到的数据进行排序操作

    • ASC(ascend):升序(从小到大)

    • DESC(descend):降序(从大到小)

  • ORDER BY 子句放在 WHERE 子句之后,LIMIT 子句之前

1.2 单列(一级)排序

  • 注意1:如果 ORDER BY 子句中没有在最后显式指明排序的方式,则默认为升序 ASC
# 按照salary从低到高的顺序显示员工信息
SELECT employee_id, last_name, salary
FROM employees
ORDER BY salary; # 默认省略了ASC
# 按照salary从高到低的顺序显示员工信息
SELECT employee_id, last_name, salary
FROM employees
ORDER BY salary DESC;
  • 注意2:列的别名可以在 ORDER BY 子句中使用,但不能在 WHERE 子句中使用
  • 为什么:MySQL的查询语句( SELECT 语句)执行的顺序

    • 先执行 FROM 子句,选择当前数据库中的一张表

    • 再执行 WHERE 子句,根据 WHERE 子句声明的条件过滤数据,此时得到的数据是包含所有字段(列)的筛选后的记录(行)

    • 然后执行 SELECT 子句,选择指定的字段(列),并给字段取别名

    • 最后执行 ORDER BY 子句,按照指定字段对数据进行排序

  • 由于列的别名是在 SELECT 子句中声明,而 ORDER BY 子句是在 SELECT 后执行的,故可以在 ORDER BY 中使用列的别名

# 正确
SELECT employee_id, salary, salary * 12 annual_sal
FROM employees
ORDER BY annual_sal;

# 错误
SELECT employee_id, salary, salary * 12 annual_sal
FROM employees
WHERE annual_sal > 81600;
  • 注意3:在 SELECT 语句中 ,WHERE 子句一定要紧跟 FROM 子句,而 ORDER BY 子句放在 WHERE 子句之后,LIMIT 子句之前
  • 注意4:ORDER BY 子句中可以使用未在 SELECT 子句中声明的字段(列)进行排序
SELECT employee_id, salary
FROM employees
WHERE department_id IN (50, 60, 70)
ORDER BY department_id DESC;

1.3 多列(多级)排序

  • 在对多个字段(多列)进行排序时,首先排序的第一列必须有相同的列值时,才会对第二列进行排序。如果第一列数据中所有值都是唯一的,将不再对第二列进行排序
# 首先按照department_id的降序排列,然后按照salary的升序排列
SELECT employee_id, salary, department_id
FROM employees
ORDER BY department_id DESC, salary ASC;

2. 分页:LIMIT

2.1 背景

背景1:查询返回的记录太多了,查看起来很不方便,怎么样能够实现分页查询呢?

背景2:表里有 4 条数据,我们只想要显示第 2、3 条数据怎么办呢?

分页显示的好处:约束返回结果的数量可以减少数据表的网络传输量,也可以提升查询效率。如果我们知道返回结果只有1条,就可以使用 LIMIT 1 ,告诉 SELECT 语句只需要返回一条记录即可。这样的好处就是 SELECT 不需要扫描完整的表,只需要检索到一条符合条件的记录即可返回

2.2 实现规则

  • 分页的原理:所谓分页显示,就是将数据库中的结果集,一段一段地分页显示出来
  • MySQL中使用 LIMIT 实现数据的分页显示
  • 格式:
# 严格来说:
LIMIT 位置偏移量, 条目数

# 当位置偏移量为0时,即从头开始显示记录时,可以将0省略
LIMIT 0, 条目数;
# 等价于:
LIMIT 条目数;
  • 举例:
# 每页显示20条记录,此时显示第1页
SELECT employee_id, last_name
FROM employees
LIMIT 0, 20;

# 每页显示20条记录,此时显示第2页
SELECT employee_id, last_name
FROM employees
LIMIT 20, 20;

# 每页显示20条记录,此时显示第3页
SELECT employee_id, last_name
FROM employees
LIMIT 40, 20;

# 显示第32,33条数据
SELECT employee_id, last_name
FROM employees
LIMIT 31, 2;
  • 分页显式公式:每页显示pageSize条记录,此时显示第pageNo页
SELECT *
FROM table
LIMIT (pageNo - 1) * pageSize, pageSize;

2.3 SELECT 语句中关键词声明的顺序

  • SELECT 语句中 ,WHERE 子句一定要紧跟 FROM 子句,而 ORDER BY 子句放在 WHERE 子句之后,LIMIT 子句之前
SELECT employee_id, last_name, salary
FROM employees
WHERE salary > 6000
ORDER BY salary DESC
LIMIT 0, 10;

2.4 MySQL 8.0 新特性

  • 格式:
LIMIT 条目数 OFFSET 位置偏移量
  • 举例:
# 显示第32,33条数据
# MySQL8.0之前
SELECT employee_id, last_name
FROM employees
LIMIT 31, 2;

# MySQL8.0之后
SELECT employee_id, last_name
FROM employees
LIMIT 2 OFFSET 31;

练习:查询员工表中工资最高的员工信息

SELECT employee_id, Last_name, salary
FROM employees
ORDER BY salary DESC
LIMIT 1; # LIMIT 0, 1;

最后

以上就是现代大侠为你收集整理的MySQL基础篇——第05章 排序与分页MySQL基础篇——第05章 排序与分页的全部内容,希望文章能够帮你解决MySQL基础篇——第05章 排序与分页MySQL基础篇——第05章 排序与分页所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部