当前位置: 首页 > news >正文

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中两个非常重要的关键字,它们在数据处理和结果集控制方面发挥着关键作用。我们在项目中还是要多使用这两个关键字,毕竟可以提高查询效率,优化用户体验。

本篇文章到这里就结束了,后续会继续分享相关的知识,感谢各位小伙伴们的支持!

在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • go/函数
  • 从IPC摄像机读取视频帧解码并转化为YUV数据到转化为Bitmap
  • DeepSeek 2.5本地部署的实战教程
  • 7--SpringBoot-后端开发、原理详解(面试高频提问点)
  • Web后端开发技术:RESTful 架构详解
  • 如何在GitHub上Clone项目:一步步指南
  • js 深入理解类-class
  • 存储系统概述
  • 移动端如何实现智能语音交互
  • Java免税商品优选商城:Spring Boot实战
  • 【在Linux世界中追寻伟大的One Piece】IP分片和组装的具体过程
  • Linux:syslog文件删掉 不能自动创建
  • Cpp类和对象(中续)(5)
  • 如何将MySQL卸载干净(win11)
  • 论 JAVA 集合框架中 接口与类的关系
  • 自己简单写的 事件订阅机制
  • 「面试题」如何实现一个圣杯布局?
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • Android组件 - 收藏集 - 掘金
  • C++11: atomic 头文件
  • input实现文字超出省略号功能
  • Javascript设计模式学习之Observer(观察者)模式
  • Linux各目录及每个目录的详细介绍
  • passportjs 源码分析
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • sessionStorage和localStorage
  • Vue2.0 实现互斥
  • 构建工具 - 收藏集 - 掘金
  • 机器学习学习笔记一
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 前端面试之闭包
  • 使用common-codec进行md5加密
  • 我的业余项目总结
  • 在Mac OS X上安装 Ruby运行环境
  • 白色的风信子
  • gunicorn工作原理
  • ionic入门之数据绑定显示-1
  • k8s使用glusterfs实现动态持久化存储
  • linux 淘宝开源监控工具tsar
  • 湖北分布式智能数据采集方法有哪些?
  • ​iOS实时查看App运行日志
  • ​用户画像从0到100的构建思路
  • ## 临床数据 两两比较 加显著性boxplot加显著性
  • #Java第九次作业--输入输出流和文件操作
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • (27)4.8 习题课
  • (Oracle)SQL优化基础(三):看懂执行计划顺序
  • (待修改)PyG安装步骤
  • (转)visual stdio 书签功能介绍
  • .axf 转化 .bin文件 的方法
  • .NET C# 使用GDAL读取FileGDB要素类
  • .net 写了一个支持重试、熔断和超时策略的 HttpClient 实例池
  • .net安装_还在用第三方安装.NET?Win10自带.NET3.5安装
  • .py文件应该怎样打开?