企业网站开发北京,网站建设上海网站制作,动态海报网站,广州建设大厦地址前言
众所周知#xff0c;LIMIT和ORDER BY在数据库中#xff0c;是两个非常关键并且经常一起使用的SQL语句部分#xff0c;它们在数据处理和分页展示方面发挥着重要作用。
今天就结合工作中遇到的实际问题#xff0c;回顾一下这块的知识点。同时希望这篇文章可以帮助到正…前言
众所周知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。countcount代表每页的的记录条数。
如果想要结果集从索引为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 testpage.currentPage ! null and page.pageSize ! null limit #{offset}, #{page.pageSize}
/if这样的话就可以确保所有传入的参数都是安全的避免SQL 注入。
文章总结
SoLIMIT和ORDER BY是MySQL中两个非常重要的关键字它们在数据处理和结果集控制方面发挥着关键作用。我们在项目中还是要多使用这两个关键字毕竟可以提高查询效率优化用户体验。
本篇文章到这里就结束了后续会继续分享相关的知识感谢各位小伙伴们的支持