sql语句分页查询,如何同时返回记录总条数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql语句分页查询,如何同时返回记录总条数相关的知识,希望对你有一定的参考价值。

我只想到用子查询select top 10 *,(select count(1) from userTable )as 'count' from userTable但这样总记录会查10次我想要只查1次count(*) ,然后添加到记录集的最后一列的第一行或者 能在sql语句中添加output参数吗?我用的java回答:你如果这样写sql语句的话,那么,在你查询出来的结果集中肯定会包含10个“count(1)”。如果你只想出现一次“count(1)”的话,你就必须把“count(1)”单独查询出来,然后再用union和另一个记录集进行合并。没有办法给你演示,只能这样给你说了,不知道你看懂没有????呵,,,,追问:你的意思是添加到记录集的最后一行吗回答:差不多就是这个意思,就是把它们两者分别查询出来,然后再用union进行联合。 参考技术A

如下:

declare @total int
select @total=COUNT(*)
from mediaPack m 
left join MetaDataRecord b  on m.id = b.MediaPackID 
where m.discBarcode is not null and m.name like '%%' 
 
select *,@total as 总记录数
from mediaPack m 
left join MetaDataRecord b  on m.id = b.MediaPackID 
where m.discBarcode is not null and m.name like '%%'

一次性完成分页查询并且附带数据总条数

通常mysql获取查询记录总数我们使用如下语句:
SELECT COUNT(*) FROM users WHERE k=‘avs‘;
SELECT id FROM goods WHERE k=‘avs‘ LIMIT 10;

但是记录总数总是需要单独的语句来查询,例如在分页查询程序中就有这样的问题,其实mysql可以在一次查询中获取记录和总数的,这就是要使用SQL_CALC_FOUND_ROWS参数,使用方法如下:
SELECT SQL_CALC_FOUND_ROWS goods WHERE k=‘avs‘ LIMIT 10;
SELECT FOUND_ROWS();

这虽然是两个sql语句,但是确是查询一次数据库,效率明显提高了一半!其中SQL_CALC_FOUND_ROWS 告诉Mysql将sql所处理的行数记录下来,FOUND_ROWS() 则取到了这个纪录。

以上是关于sql语句分页查询,如何同时返回记录总条数的主要内容,如果未能解决你的问题,请参考以下文章

一次性完成分页查询并且附带数据总条数

oracle数据库,搜索百万级别数据分页优化问题

SQLSERVER如何实现分页查询?

怎样用mysql语句实现分页

使用sql语句实现分页查询

SQL Server数据库用sql语句实现分页查询 (从M条数据开始,查找N条记录。sqlserver数据库。请举例说明。)