如何查询MySQL表的前5行?解决ID不连续场景的查询问题
解决不连续ID下获取前N行的问题
嘿,这个场景太常见了!BETWEEN是用来匹配连续数值范围的,而你的ID是跳着的(1、5、6、7、8),所以用它自然拿不到前5行——它只会挑出ID落在你指定区间里的记录,而不是按行数来取。
要直接获取前5行,得用各个数据库专门的「行限制」语法,我给你列几个主流数据库的写法,按需用就行:
MySQL、PostgreSQL、SQLite:用
LIMIT关键字直接指定行数
如果只是取任意前5行,写法很简单:SELECT * FROM 你的表名 LIMIT 5;但我强烈建议加上
ORDER BY——数据库默认的返回顺序是不固定的,不加排序的话,每次查出来的前5行可能不一样。按ID从小到大取前5行的话,就写:SELECT * FROM 你的表名 ORDER BY id ASC LIMIT 5;SQL Server、Access:用
TOP关键字
直接把要取的行数放在SELECT后面:SELECT TOP 5 * FROM 你的表名;同样,加排序保证结果稳定:
SELECT TOP 5 * FROM 你的表名 ORDER BY id ASC;Oracle:分版本处理
12c及以上版本可以用更简洁的FETCH NEXT:SELECT * FROM 你的表名 ORDER BY id ASC FETCH NEXT 5 ROWS ONLY;老版本就得用
ROWNUM,注意要先排序再过滤:SELECT * FROM ( SELECT * FROM 你的表名 ORDER BY id ASC ) WHERE ROWNUM <= 5;
核心思路就是:不要用范围匹配(BETWEEN)来实现行数限制,直接用数据库提供的行数量控制语法,同时记得加排序来保证结果的一致性。
内容的提问来源于stack exchange,提问作者Soroosh
相关产品推荐
相关产品推荐

