SQL排序与分页查询技巧

1、排序数据

1.1 排序规则

  • 如果没有使用排序规则,默认情况下查询返回的结果是按照添加数据的顺序显示的。
  • 使用 ORDER BY 子句进行排序操作
  • 搭配 ASC(ascend)升序,DESC(descend)降序使用
  • ORDER BY 子句在 SELECT 语句的结尾

1.2 单列排序

(1)根据工资由低到高排列【没有显示排序方式默认是升序】

sql 复制代码
SELECT last_name,employee_id,salary
FROM employees
ORDER BY salary;

(2)根据工资由高到低排列

sql 复制代码
SELECT last_name,employee_id,salary
FROM employees
ORDER BY salary DESC;

(3)使用列的别名进行排序

sql 复制代码
SELECT employee_id,last_name,salary * 12 annual_salary
FROM employees
ORDER BY annual_salary;
  • 列的别名只可以在 ORDER BY 中使用,不能在 WHERE 中使用(因为 SELECT 语句在 WHERE 语句之后执行,此时别名还没有定义)

1.3 多列排序

(1)显示员工信息,按照部门编号降序并且工资升序排列

sql 复制代码
SELECT employee_id,salary,department_id
FROM employees
ORDER BY department_id DESC,salary;
  • SELECT 字段只是要显示的列,排序的列可以不出现在 SELECT 中
  • 在进行多列排序时,首先排序的第一列必须有序后才会进行第二列的排序

2、分页

查询返回的记录过多,一次性全部展示对设备性能以及时间上来说不友好,而且也不一定用到这么多数据,此时就需要分页,将查询的内容按照一定的长度进行划分。

2.1 实现规则

  • 分页原理:分页显示就是将数据库中的结果集一段一段显示出来所需要的条件。
  • 使用 LIMIT 实现分页,用法:LIMIT 位置偏移量 ,行数。
  • 说明:第一个参数"位置偏移量"指示MySQL从哪一行开始显示 ,是一个可选参数,默认会从表中的第一条记录开始(第一条记录的位置偏移量是0,第二条记录的位置偏移量是1,以此类推);第二个参数"行数"指示返回的记录条数
sql 复制代码
SELECT employee_id,last_name
FROM employees
LIMIT 19,20;
  • 分页显示公式:(显示页数 - 1)* 每页条数 ,每页条数
sql 复制代码
# 显示第 pagenum 页,每页包含 pagesize 条数据
SELECT employee_id,last_name
FROM employees
LIMIT (pagenum - 1) * pagesize , pagesize;

在 MySQL 8.0 中有一个关键字 OFFSET 也可以与 LIMIT 使用,使用规则:

sql 复制代码
LIMIT 0,10;
# 与上面返回结果一样,不过他的偏移量0在后面,数据量10在第一个位置
LIMIT 10 OFFSET 0;

2.2 关键字声明顺序

  • FROM 和 WHERE 在一起;LIMIT 在最后
sql 复制代码
SELECT employee_id,last_name,salary
FROM employees
WHERE salary > 6000
ORDER BY salary DESC
LIMIT 0,10;

2.3 使用的好处

(1)分页返回结果可以约束查询显示的数据量,减少数据表的网络传输,也可以提升查询的效率

(2)如果只想看到一条返回结果,就可以使用LIMIT 1,告诉 SELECT 语句只需要返回一条记录即可。此时 SELECT 不需要扫描完整的表,只需要检索到一条符合条件的记录即可返回。

相关推荐
平安的平安3 分钟前
从“云端排队“到“边缘上岗“:DolphinDB 云边协同如何重塑工业现场的实时智能
数据库
寻道码路11 分钟前
LangChain4j Java AI 应用开发实战(二十六):多模型集成策略 —— OpenAI、DeepSeek、阿里百炼混合使用
java·开发语言·人工智能·ai
懒鸟一枚14 分钟前
为什么 useradd -rs /bin/false service 创建的用户无法用 su 切换?
linux·服务器·数据库
面朝大海,春不暖,花不开17 分钟前
BPF与eBPF简介:核心概念与观测工具概览
开发语言·php·ebpf·bpf·性能观测
ch.ju18 分钟前
Java Programming Chapter 4——Static code block
java·开发语言
弹简特20 分钟前
【Java项目-企悦抽】04-项目演示+项目源码+AI赋能整理接口文档
java·开发语言
郝学胜-神的一滴22 分钟前
Qt 高级编程 034:深耕QWidget底层内核—彻底吃透无边框窗口设计核心原理
开发语言·c++·qt·程序人生·软件开发·用户界面
爱喝热水的呀哈喽22 分钟前
hypermesh两个网格参数解析
服务器·数据库·mysql
万亿少女的梦16832 分钟前
基于Spring Boot的楚雄旅游景区门票售卖系统设计与实现
java·spring boot·mysql·vue·系统设计
不会写代码的ys32 分钟前
C++复习篇
java·开发语言·c++