SQL LIMIT限制查询返回数量

在查询过程中,我们可以约束返回结果的数量,使用LIMIT关键字。比如我们想返回英雄名称及最大生命值,按照最大生命值从高到低排序,返回5条记录即可。

SELECT name, hp_max FROM heros ORDER BY hp_max DESC LIMIT 5

运行结果(5条记录):

SQL LIMIT限制查询数量
有一点需要注意,约束返回结果的数量,在不同的DBMS中使用的关键字可能不同。在MySQL、PostgreSQL、MariaDB和SQLite中使用LIMIT关键字,而且需要放到SELECT语句的最后面。如果是SQL Server和Access,需要使用TOP关键字,比如:

SELECT TOP 5 name, hp_max FROM heros ORDER BY hp_max DESC

如果是DB2,使用FETCH FIRST 5 ROWS ONLY这样的关键字:

SELECT name, hp_max FROM heros ORDER BY hp_max DESC FETCH FIRST 5 ROWS ONLY

如果是Oracle,你需要基于ROWNUM来统计行数:

SELECT name, hp_max FROM heros WHERE ROWNUM <=5 ORDER BY hp_max DESC

需要说明的是,这条语句是先取出来前5条数据行,然后再按照hp_max从高到低的顺序进行排序。但这样产生的结果和上述方法的并不一样。我会在后面讲到子查询,你可以使用SELECT name, hp_max FROM (SELECT name, hp_max FROM heros ORDER BY hp_max) WHERE ROWNUM <=5得到与上述方法一致的结果。

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

SQL LIMIT常见问题

问题1描述

在MySQL中,LIMIT关键词是最后执行的,如果可以确定只有一条结果,那么就起不到查询优化的效果了吧,因为LIMIT是对最后的结果集过滤,如果结果集本来就只有一条,那就没有什么用了。

解答

如果你可以确定结果集只有一条,那么加上LIMIT 1的时候,当找到一条结果的时候就不会继续扫描了,这样会加快查询速度。这里指的查询优化针对的是会扫描全表的SQL语句,如果数据表已经对字段建立了唯一索引,那么可以通过索引进行查询,不会全表扫描的话,就不需要加上LIMIT 1了。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程