MySQL中的LIMIT与ORDER BY关键字详解
前言
众所周知,LIMIT和ORDER BY在数据库中,是两个非常关键并且经常一起使用的SQL语句部分,它们在数据处理和分页展示方面发挥着重要作用。
今天就结合工作中遇到的实际问题,回顾一下这块的知识点。同时希望这篇文章可以帮助到正在学习,及复习这块知识的大佬!

LIMIT 关键字
LIMIT关键字的作用是限制查询结果集返回的记录数。比如说我们要查询数据库表的时候,执行SQL语句返回了大量的List,这个时候就可以使用Limit关键字限制查询数据库返回的条数。
Limit关键字的基本语法
SELECT column1, column2, ...
FROM table_name
WHERE condition
ORDER BY column_name
LIMIT offset, count;
- offset:在上面的代码里,注意offset是可选的,它是指定结果从哪一条记录开始返回,第一条记录的偏移量为0。如果省略offset,则默认从第一条记录开始(offset为0)。
- count:count代表每页的的记录条数。
如果想要结果集从索引为0的行数开始,每页的大小为10条,那么语句为:
limit 0, 10;
上面这个分页是第一页,第二页:
limit 10, 10;
以此类推…
第三页
limit 20, 10;
第四页
limit 30, 10;
根据上面结果我们可以总结出规律,分页查询的公示可以推出来:
limit (index - 1) * count, count
但是需要注意亿点!当LIMIT与OFFSET这对“cp”一起使用时,随着OFFSET的增大,查询性能可能会逐渐下降,毕竟数据库需要扫描更多的行才能定位到起始点。
同时,在使用LIMIT关键字对数据分页时,经常先对数据进行排序(使用ORDER BY关键字),这样得出的结果才会有序。

ORDER BY 关键字
ORDER BY关键字的作用是对查询结果集进行排序。它可以基于一个或者多个列对结果进行升序(ASC)或降序(DESC)排序。
基本语法如下:
SELECT column1, column2, ...
FROM table_name
WHERE condition
ORDER BY column_name1 ASC|DESC, column_name2 ASC|DESC, ...;
ASC:升序排序(如果没有指定的话,默认值是升序)。
DESC:降序排序。
当使用多个列进行排序时,MySQL会按照ORDER BY子句中列的顺序依次进行排序。如果前面的列有相同的值,会按照后面的列进行排序。
其次,如果查询涉及大量数据,并且也没有使用索引进行排序,那么排序操作可能会比较耗时。所以,在使用-排序功能的时候,可以为排序列创建索引来提高查询效率。
LIMIT与ORDER BY的协同工作
在实际的项目应用中,LIMIT和ORDER BY经常一起使用,共同实现有序的分页显示。通过ORDER BY对查询结果进行排序,然后通过LIMIT限制返回的记录数。这样,两两搭配,干活不累!!!
但是最近结合Java代码查询数据的时候,在MyBatis的XML文件中使用SQL查询数据库的时候出现了明显的错误,这里和大家分享下。
具体的详细代码如下:

#{}会自动转义特殊字符,可以防止SQL注入,而对于${},它不会进行转义处理。但是在debug代码过后,发现上面的这种写法是错误的,最好是在Java代码中把Limit后面的结果值算出来后直接传入到XML中,而不是在XML中进行加减乘除做运算。因为 MyBatis 不会执行 Java 表达式。

所以我们要修正 limit 语句,提前在Java代码中计算偏移量:
// 在 Java 代码中
int offset = (page.getCurrentPage() - 1) * page.pageSize();
// 然后传递 offset 和 pageSize 到 MyBatis 映射中
在 MyBatis XML 中:
<if test="page.currentPage != null and page.pageSize != null"> limit #{offset}, #{page.pageSize}
</if>
这样的话,就可以确保所有传入的参数都是安全的,避免SQL 注入。
文章总结
So,LIMIT和ORDER BY是MySQL中两个非常重要的关键字,它们在数据处理和结果集控制方面发挥着关键作用。我们在项目中还是要多使用这两个关键字,毕竟可以提高查询效率,优化用户体验。
本篇文章到这里就结束了,后续会继续分享相关的知识,感谢各位小伙伴们的支持!

相关文章:
MySQL中的LIMIT与ORDER BY关键字详解
前言 众所周知,LIMIT和ORDER BY在数据库中,是两个非常关键并且经常一起使用的SQL语句部分,它们在数据处理和分页展示方面发挥着重要作用。 今天就结合工作中遇到的实际问题,回顾一下这块的知识点。同时希望这篇文章可以帮助到正…...
Java 编码系列:集合框架(List、Set、Map 及其常用实现类)
引言 在 Java 开发中,集合框架是不可或缺的一部分,它提供了存储和操作一组对象的工具。Java 集合框架主要包括 List、Set 和 Map 接口及其常用的实现类。正确理解和使用这些集合类不仅可以提高代码的可读性和性能,还能避免一些常见的错误。本…...
Go进阶概览 -【7.2 泛型的使用与实现分析】
7.2 泛型的使用与实现分析 泛型是Go 1.18引入的概念,在引入这个概念前经过了好几年的考量最终才将这这个特性加进去。 泛型在多种语言中都是存在的,比如C、Java等语言中都有泛型的概念。 本节我们将针对泛型的使用、实现原理进行整体的讲解。 本节代…...
罗德岛战记游戏源码(客户端+服务端+数据库+全套源码)游戏大小9.41G
罗德岛战记游戏源码(客户端服务端数据库全套源码)游戏大小9.41G 下载地址: 通过网盘分享的文件:【源码】罗德岛战记游戏源码(客户端服务端数据库全套源码)游戏大小9.41G 链接: https://pan.baidu.com/s/1y0…...
AI+教育|拥抱AI智能科技,让课堂更生动高效
AI在教育领域的应用正逐渐成为现实,提供互动性强的学习体验,正在改变传统教育模式。AI不仅改变了传统的教学模式,还为教育提供了更多的可能性和解决方案。从个性化学习体验到自动化管理任务,AI正在全方位提升教育质量和效率。随着…...
WebServer
一、服务器代码 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <unistd.h> #define PORT 80 #define BUFFER_SIZE 1024 void ha…...
java项目之基于spring boot的多维分类的知识管理系统的设计与实现源码
项目简介 基于spring boot的多维分类的知识管理系统的设计与实现实现了以下功能: 基于spring boot的多维分类的知识管理系统的设计与实现的主要使用者管理员可以管理用户信息,知识分类,知识信息等,用户可以查看和下载管理员发布…...
go的结构体、方法、接口
结构体: 结构体:不同类型数据集合 结构体成员是由一系列的成员变量构成,这些成员变量也被称为“字段” 先声明一下我们的结构体: type Person struct {name stringage intsex string } 定义结构体法1: var p1 P…...
力扣第一题——删除有序数组中的重复项
给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1)额外空间的条件下完成。 示例 1&#x…...
Tuxera NTFS for Mac 2023绿色版
在数字化时代,数据的存储和传输变得至关重要。Mac用户经常需要在Windows NTFS格式的移动硬盘上进行读写操作,然而,由于MacOS系统默认不支持NTFS的写操作,这就需要我们寻找一款高效的读写软件。Tuxera NTFS for Mac 2023便是其中…...
LeetCode[中等] 155. 最小栈
设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。void push(int val) 将元素val推入堆栈。void pop() 删除堆栈顶部的元素。int top() 获取堆栈顶部的元素。int get…...
Python青少年简明教程目录
Python青少年简明教程目录 学习编程语言时,会遇到“开头难”和“深入难”的问题,这是许多编程学习者都会经历的普遍现象。 学习Python对于青少年来说是一个很好的编程起点,相对容易上手入门,但语言特性复杂,应用较广&…...
Revit学习记录-版本2018【持续补充】
将墙面拆分并使用不同材料 【修改】>【几何图形】>【拆分面】(SF), 然后再使用【修改】>【几何图形】>【填色】(PT)进行填充 楼板漏在墙外 绘制楼板时最好选择墙体绘制,如果标高上不显示墙体,可以先选…...
深度学习01-概述
深度学习是机器学习的一个子集。机器学习是实现人工智能的一种途径,而深度学习则是通过多层神经网络模拟人类大脑的方式进行学习和知识提取。 深度学习的关键特点: 1. 自动提取特征:与传统的机器学习方法不同,深度学习不需要手动…...
leetcode232. 用栈实现队列
leetcode232. 用栈实现队列 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty): 实现 MyQueue 类: void push(int x) 将元素 x 推到队列的末尾 int pop() 从队列的开头移除并返回元…...
智慧火灾应急救援航拍检测数据集(无人机视角)
智慧火灾应急救援。 无人机,直升机等航拍视角下火灾应急救援检测数据集,数据分别标注了火,人,车辆这三个要素内容,29810张高清航拍影像,共31GB,适合森林防火,应急救援等方向的学术研…...
eureka.client.service-url.defaultZone的坑
错误的配置 eureka: client: service-url: default-zone: http://192.168.100.10:8080/eureka正确的配置 eureka: client: service-url: defaultZone: http://192.168.100.10:8080/eureka根据错误日志堆栈打断电调试 出现两个key,也就是defaultZone不支持snake-c…...
统信服务器操作系统【d版字符系统升级到dde图形化】配置方法
统信服务器操作系统d版本上由字符系统升级到 dde 桌面系统的过程 文章目录 一、准备环境二、功能描述安装步骤1. lightdm 安装2. dde 安装 一、准备环境 适用版本:■UOS服务器操作系统d版 适用架构:■ARM64、AMD64、MIPS64 网络:连接互联网…...
学习IEC 62055付费系统标准
1.IEC 62055 国际标准 IEC 62055 是目前关于付费系统的唯一国际标准,涵盖了付费系统、CIS 用户信息系统、售电系统、传输介质、数据传输标准、预付费电能表以及接口标准等内容。 IEC 62055-21 标准化架构IEC 62055-31 1 级和 2 级有功预付费电能表IEC 62055-41 STS…...
如何在Markdown写文章上传到wordpress保证图片不丢失
如何在Markdown写文章上传到wordpress保证图片不丢失 写文日期,2023-11-16 引文 众所周知markdown是一款nb的笔记软件,本篇文章讲解如何在markdown编写文件后上传至wordpress论坛。并且保证图片不丢失(将图片上传至云端而非本地方法) 一&…...
别再只用ZF和MMSE了!手把手教你用MATLAB实现ML信号检测(附完整代码与性能对比)
突破传统线性检测:MATLAB实战ML信号检测全解析 在无线通信系统的接收端设计领域,信号检测算法的选择直接影响着系统性能与实现复杂度之间的平衡。许多初学者往往止步于迫零(ZF)和最小均方误差(MMSE)这两种线性检测方法,却忽视了最大似然(ML)检…...
GyverDS18库:工业级DS18B20单总线温度驱动设计与实践
1. GyverDS18库深度解析:面向工业级应用的DS18B20全功能驱动设计Dallas DS18B20是业界最成熟的单总线数字温度传感器之一,凭借其独特的1-Wire协议、无需外部ADC、支持多点组网及寄生供电能力,在工业监控、环境监测、智能家电等领域广泛应用。…...
从MAX30102项目实战出发:解决Keil5编译STM32时ARMCLANG和头文件缺失的连环坑
从MAX30102项目实战解析Keil5编译STM32的深度排坑指南 当你在深夜调试MAX30102血氧传感器时,Keil5突然弹出一连串编译器报错——这种经历对STM32开发者来说绝不陌生。本文将以真实项目为背景,拆解那些官方文档从未提及的编译陷阱。不同于常规操作手册&a…...
PyTorch核心模块实战指南:从nn.Sequential到nn.MaxPool2d的深度解析
1. 快速上手nn.Sequential:像搭积木一样构建神经网络 第一次接触PyTorch时,我被各种复杂的网络结构吓到了——直到发现nn.Sequential这个"乐高积木盒"。这个容器让我能用拼积木的方式组合网络层,比如下面这个图像分类器的经典结构&…...
长上下文与RAG
读到一篇探讨RAG技术的文章,很受用,遂记录一下。核心结论:RAG不会被无限上下文取代。 原文地址:LLM无限上下文了,RAG(Retrieval Augmented Generation)还有意义吗? - 今日头条 以下…...
Qt跨平台即时通讯实战:从界面设计到TCP通信的完整实现
1. Qt跨平台即时通讯开发概述 用Qt框架开发即时通讯软件最大的优势就是"一次编写,到处运行"。我去年接手过一个项目,需要在Windows和Linux双平台上部署聊天工具,当时尝试过多种技术方案,最终Qt以绝对优势胜出。想象一下…...
跨平台部署YOLOv5的路径陷阱:从WindowsPath错误看Python pathlib的兼容性设计
1. 当WindowsPath遇上Linux:YOLOv5部署的路径陷阱 最近帮朋友调试一个YOLOv5模型部署问题,场景特别典型:在Windows训练好的目标检测模型,迁移到Linux服务器就报错。错误信息直指一个看似简单的路径问题:"NotImple…...
终极英雄联盟工具集:3大核心功能让你轻松掌控游戏全局
终极英雄联盟工具集:3大核心功能让你轻松掌控游戏全局 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit League-Toolkit…...
矩阵分解(1)-- 从高斯消元到对称正定:LU、LDLT与Cholesky分解的算法演进与应用场景
1. 矩阵分解:为什么我们需要它? 想象一下你面前有一堆积木,乱七八糟地堆在一起。如果你想快速找到其中某一块积木,可能需要翻找很久。但如果有人帮你把这些积木按照颜色、形状分类摆放整齐,找起来就会容易得多。矩阵分…...
5分钟彻底告别风扇噪音!FanControl终极静音配置完全指南
5分钟彻底告别风扇噪音!FanControl终极静音配置完全指南 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/…...
