sql 查询记录数结果集某个区间内记录

以查询前20到30条为例,主键名为id

方法一: 先正查,再反查
select top 10 * from (select top 30 * from tablename order by id asc) A order by id desc

方法二: 使用left join
select top 10 A.* from tablename A
left outer join (select top 20 * from tablename order by id asc) B
on A.id = B.id
where B.id is null
order by A.id asc

方法三: 使用not exists
select top 10 * from tablename A
where id not exists
(select top 20 * from tablename B on A.id = B.id)

方法四: 使用not in
select top 10 * from tablename
where id not in
(select top 20 id from tablename order by id asc)
order by id asc

方法五: 使用rank()
select id from
(select rank() over(order by id asc) rk, id from tablename) T
where rk between 20 and 30

中第五种方法看上去好像没有问题,查了下文档,当over()用于rank/row_number时,整型列不能描述一个列,所以会产生非预期的效果. 待考虑下,有什么办法可以修改为想要的结果.

(0)

相关推荐

  • SQL小技巧 又快又简单的得到你的数据库每个表的记录数

    但是如何得到某个数据库所有的表的记录数,你要是用上面的方法估计得累死了.呵呵 下面提供如何借用sysindexes和sysobjects表来得到某个数据库每个表记录数的方法: 先给出SQL Server 2000版本的: 复制代码 代码如下: SELECT o.NAME, i.rowcnt FROM sysindexes AS i INNER JOIN sysobjects AS o ON i.id = o.id WHERE i.indid < 2 AND OBJECTPROPERTY(o.id

  • MYSQL速度慢的问题 记录数据库语句

    需要开启一个慢查询输出的一个机关:log_slow_queries.可以在MySQL配置文件中(my.ini/my.cnf)中设置,也可以通过MySQL客户端临时设置.第二种方法的好处是,可以不用重启MySQL服务,而使设置生效.那就来试试这个: 首先通过客户端连接到Mysql服务器,然后输入下面的语句: SET GLOBAL log_slow_queries = ON; SET GLOBAL long_query_time = 3; 这样MySQL就会把耗时>=3秒的SQL语句给记录下来,并输

  • JDBC大批量写入数据到SQLServer2000,记录数大于10000

    复制代码 代码如下: SpObserver.putSp("sessionFactory1"); SimpleDateFormat fomat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Session s=null; s=daoSupport.getSessionFactory().openSession(); Connection con=s.connection(); Statement stmt = null;

  • SQL Server数据库按百分比查询出表中的记录数

    SQL Server数据库查询时,能否按百分比查询出记录的条数呢?答案是肯定的.本文我们就介绍这一实现方法. 实现该功能的代码如下: create procedure pro_topPercent ( @ipercent [int] =0 --默认不返回 ) as begin select top (@ipercent ) percent * from books end 或 create procedure pro_topPercent ( @ipercent [int] =0 ) as be

  • MySQL数据库查看数据表占用空间大小和记录数的方法

    如果想知道MySQL数据库中每个表占用的空间.表记录的行数的话,可以打开MySQL的 information_schema 数据库.在该库中有一个 TABLES 表,这个表主要字段分别是: TABLE_SCHEMA : 数据库名 TABLE_NAME:表名 ENGINE:所使用的存储引擎 TABLES_ROWS:记录数 DATA_LENGTH:数据大小 INDEX_LENGTH:索引大小 其他字段请参考MySQL的手册,这几个字段对我们来说最有用. 一个表占用空间的大小,相当于是 数据大小 +

  • sql 查询记录数结果集某个区间内记录

    以查询前20到30条为例,主键名为id 方法一: 先正查,再反查 select top 10 * from (select top 30 * from tablename order by id asc) A order by id desc 方法二: 使用left join select top 10 A.* from tablename A left outer join (select top 20 * from tablename order by id asc) B on A.id =

  • mysql一次将多条不同sql查询结果并封装到一个结果集的实现方法

    目录 前言 问题处理过程 1.使用union all进行并列查询 2.求和处理 总结 前言 最近遇到一个统计查询需求,要求一次性查询多个统计信息,其中两个查询信息不在一个表中,也没有业务关联,表中也没有做连接处理.不考虑产品设计是否合理,完全是实际需求如此,需要一次性查询出来返回给前端进行展示,对于这种“非常规”的统计查询平常肯定会遇见,感觉有点代表性,所以简单记录一下.希望对有相同需求的同学可以作为参考. 问题处理过程 简单交代一下业务场景,为方便理解,对业务需求做了简化处理. 现在有一个分销

  • SQL Server 在分页获取数据的同时获取到总记录数

    SQL Server 获取数据的总记录数,有两种方式: 1.先分页获取数据,然后再查询一遍数据库获取到总数量 2.使用count(1) over()获取总记录数量 SELECT * FROM ( SELECT ROW_NUMBER() OVER(ORDER BY Id DESC) rn, COUNT(1) OVER() AS TotalCount, Id FROM dbo.T_User )a WHERE a.rn BETWEEN 1 AND 5 第二种方式既分页还能获取到总记录数量.就是多一个字

  • mybatis-plus返回查询总记录数方式

    目录 mybatis-plus返回查询总记录数 mybatis-plus分页查询,总条数为零的解决 mybatis-plus返回查询总记录数 mp框架提供了selectCount方法,来查询总记录数: 需求: 查找薪水大于3500 名字里有“小”的 员工的个数 sql实现: select count(*) from t_employee where salary>3500 and name like '%小%' 代码实现: @Test public void selectCountByQuery

  • 如何使用MySQL查询一年中每月的记录数

    目录 先说结论 查询结果 思路及SQL解释 1. 如何以月份划分 2.获取每月数据 3.统计每月数据 4.统计值与月份相对应 5.总体整合 结语 以下演示将在下表数据中进行: 其中:id为主键用于表的连接:value1为需要统计的主体,如用户等:date为记录日期. 先说结论 SELECT tmp.value1 AS `value1`, MONTH(SUBSTRING_INDEX(tmp.ct, ',', 1)) AS `month`, LENGTH(tmp.ct) - LENGTH( REPL

  • MySQL实现查询数据库表记录数

    前言: mysql统计一个数据库里所有表的数据量,最近在做统计想查找一个数据库里基本所有的表数据量,数据量少的通过select count再加起来也是可以的,不过表的数据有点多,不可能一个一个地查.记得在Navicat里,选择一个数据量,点击表,如图: 那么如何通过sql实现呢?在mysql里是可以查询information_schema.tables这张表的 SELECT table_rows,table_name FROM information_schema.tables WHERE TA

  • sql查询点滴记录

    也不一定,以前从来没有深入的研究过sql查询,最近买了一本T-SQL查询的书,把以前忽视的问题都记录一下 以前一直模模糊糊的把sqlserver作为关系数据库,里面就是以表的方式进行数据的关系化话管理,后来有些SQL语句看着怪怪的,也没怎么管 其实 "写好sql,需要的是一种面向声明和集合的思维方式,而不是面向过程的(集合是重点)"(PS:数据库里面的表就是一个集合,集合是无序的!) 以前没太注意过sql语句执行时的逻辑顺序,在研究linq时,linq强调了sql语句的执行顺序,在看书

  • SQL查询方法精华集

    一. 简单查询 简单的Transact-SQL查询只包括选择列表.FROM子句和WHERE子句.它们分别说明所查询列.查询的表或视图.以及搜索条件等. 例如,下面的语句查询testtable表中姓名为"张三"的nickname字段和email字段. SELECT nickname,email FROM testtable WHERE name='张三' (一) 选择列表 选择列表(select_list)指出所查询列,它可以是一组列名列表.星号.表达式.变量(包括局部变量和全局变量)等

  • SQL查询数据库中符合条件的记录的总数

    1. select count(*) from table; //统计元组个数 2. select count(列名) from table; //统计一列中值的个数 3. select count(*) from table where 字段 = ""; //符合该条件的记录总数 4. sql_count = "select count(*) from article a where 1=1 "; //这条语句中a就代表article 这张表,后面可以写a.字段来

随机推荐