1.首先。select top使用方法:

參考问题  select top n * from和select * from的差别

select * from table
--  取全部数据。返回无序集合

select top n * from table
 -- 依据表内数据存储顺序取前n条,返回无序集合

select * from table order by id desc --
取全部数据。按id逆序返回有序列表

select top n * from table order by id desc--
先按id逆序。再取前n条,返回按id排序的有序集合【注意,按某个属性排序。该排序属性的数据列值最好是不反复的。假设有反复的。那排序属性值相等的这些行在结果集中的顺序事先是不能确定的】

栗子例如以下~

我们以pid作为排序属性值,第16行,第19行和第20行的pid值相等。

如今取以pid排序的倒数5条记录:

Connection con=new SQLConnection().getConnection();

String sql="select top 5 * from test order by pid desc";

System.out.println("select begins...");

Statement statement=con.createStatement();  

ResultSet result =  statement.executeQuery(sql);  


while (result.next()) {  

        System.out.println(result.getInt(1)+","+result.getString(2)+","+result.getString(3));  

 }

 System.out.println("select ends...");

 con.close();

 statement.close();

 result.close();

 con=null;

 statement=null;

 result=null;

结果:

select begins...

3,as,9

16,tt,8  【三者顺序事先不能确定】

19,gh,8

20,jk,8

6,bb,7

select ends...

2. 类似于“查询第10条到第20条记录”的sql语句写法 ===  常应用于分页显示上

1) String sql="select  top 10 * from (select * from test where id<21) m order by m.id desc"; //注意id为主键。子查询取出前20条记录,主查询先降序再取前10条。但结果是降序的。所以兴许处理时要注意

2)查询第m条到第n条记录:

String sql="select top n-m+1 * from test where (id not in(select top m-1 id from test))";
//能够是正常顺序的第m条到第n条记录写法。非常推荐哦~

3)【有些小毛病。我自己也不知道错在哪了,写出来。若有某位看客知道烦请留言一下哦~】
  String sql = "select top 10 * from  (select top 20 * from test) a order by a.id desc";
以上述表中数据试了一下,结果是:【为什么是从第12条到第21条嘞?想不明确】
,kl,100

,jk,8

,gh,8

,aas,18

,qw,19

,tt,8

,ww,15

,hh,13

,gg,16

,ui,11

关于3)的疑惑。在博客园找到这样一处文章《来谈谈SQL数据库中"简单的"SELECT
TOP—可能有你从未注意到的细节

-------------------------------引用開始-----------------------------------

数据表例如以下:

ID  EMPNO  NAME  AGE  

1   26929   Jerome   28

2   28394   Quince  27

3   20983   Green   30

4   27189   Mike     30

5   23167   Arishy   30

6   26371   Yager   29

我写了SQL语句想取得第3、4笔数据,測试分页玩的。

select  top 2 * from (select top 4 * from Member ) m  order by m.RowID desc

我运行中间那一段子查询:select top 4 * from Member

取得的是:

1   26929   Jerome   28

2   28394   Quince  27

3   20983   Green   30

4   27189   Mike     30

可是整个SQL语句的结果却是:【确实遇到过这种问题。可是不知道原因....】

5   23167   Arishy   30

6   26371   Yager    29

select top 2 * from (select top 4 * from table) m order by m.id desc -----
扫描完table后先降序然后再在4行中取2行   【有点疑问,不是扫描完table--取4行--降序--取2行么??】

select top 2 * from (select top 4 * from table order by id asc) m order by m.id desc ----- 扫描完table后先升序取4行然后再把这4行降序取2行

问题涉及到SQL中的子查询:

出如今from子句中的表我们称为派生表。派生表是虚拟的,未被物理详细化。也就是说当编译

的时候。如(select top 2 * from (select
top 4 * from table) m order by m.id 

desc ),外部查询和内部查询会被合并,并生成一个计划。

(注意事项:在派生表里面一般不同意使用order by除非指定了top。也就是说select top

2 * from (select * from zhuisuo order by id asc) m order by m.id desc这句语句是不

能运行的)。

派生表是个虚拟表要被外部引用。而order by返回的不是表而是游标.所以仅仅用order by的话是被限制的。然而为什么使用top加order by又能够了?是由于top能够从order
by返回的游标里选择指定数量生成一个表并返回。

再举例关于top须要注意的细节

1、使用top返回随机行,非常多人会想到用RAND函数从而得到这样一个语句

select top 4 id,name from table order by rand();

经过多次查询后,你会失望的发现它没有返回随机行。这是由于每一个查询仅仅调用它一次而不是每

行调用它一次。

2、注意insert中使用top,正确的倒叙插入top方法应该是:

insert into table

select  top (4) * from table order by id desc

------------------------------引用结束----------------------------

具体见原博客,关于top的细节,还是没有搞明确呢,往后再多看看-多实践再总结咯

“取出数据表中第10条到第20条记录”的sql语句+select top 使用方法的更多相关文章

  1. “取出数据表中第10条到第20条记录”的sql语句+selecttop用法

    1.首先,select top用法: 参考问题 select top n * from和select * from的区别 select * from table -- 取所有数据,返回无序集合 sel ...

  2. 从数据表中随机抽取n条数据有哪几种方法(join实现可以先查数据然后再拼接)

    从数据表中随机抽取n条数据有哪几种方法(join实现可以先查数据然后再拼接) 一.总结 一句话总结:最好的是这个:"SELECT * FROM table WHERE id >= (( ...

  3. 读取数据表中第m条到第n条的数据,SQL语句怎么写?

    原文:读取数据表中第m条到第n条的数据,SQL语句怎么写? 对于MySQL或者Oracle来说,如果实现从Table 表中取出第 m 条到第 n 条的记录操作,我们需要TOP函数(不是所有的数据库都支 ...

  4. oracle通过sql随机取表中的10条记录

    oracle通过sql随机取表中的10条记录: SELECT * FROM (SELECT * FROM T_USER ORDER BY DBMS_RANDOM.RANDOM()) WHERE Row ...

  5. SQL批量更新数据库中所有用户数据表中字段类型为tinyint为int

    --SQL批量更新数据库中所有用户数据表中字段类型为tinyint为int --关键说明:--1.从系统表syscolumns中的查询所有xtype='48'的记录得到类型为[tinyint]的字段- ...

  6. MySQL查询数据表中数据记录(包括多表查询)

    MySQL查询数据表中数据记录(包括多表查询) 在MySQL中创建数据库的目的是为了使用其中的数据. 使用select查询语句可以从数据库中把数据查询出来. select语句的语法格式如下: sele ...

  7. 默认情况下,不使用of子句表示在select所有的数据表中加锁(转)

    Select …forupdate语句是我们经常使用手工加锁语句.通常情况下,select语句是不会对数据加锁,妨碍影响其他的DML和DDL操作.同时,在多版本一致读机制的支持下,select语句也不 ...

  8. Oracle中使用游标转换数据表中指定字段内容格式(拼音转数字)

    应用场景:将数据表TB_USER中字段NNDP的内容中为[sannanyinv]转换为[3男1女] 主要脚本:一个游标脚本+分割字符串函数+拼音转数字脚本 操作步骤如下: 1.创建类型 create ...

  9. 批量替换数据库中所有用户数据表中字段数据类型为char和varchar到nvarchar的脚本

    解决问题:字段类型为char的总是占用指定字节长度(末尾好多空白符号),varchar数据类型长度一个汉字占2个字节,内容存储为中文的字段个人建议全部使用nvarchar. 操作说明:打开SQL Se ...

随机推荐

  1. go protobuf 编码与解码

    package main import ( "encoding/hex" "fmt" "github.com/golang/protobuf/prot ...

  2. php简单实用的调试工具类

    <?php /* * 调试类 */ class Common_Debug { //打开错误报告 public static function showError($debug = true) { ...

  3. 00C#

    C# C#(读作“See Sharp”)是一种简单.现代.面向对象且类型安全的编程语言.C# 起源于 C 语言家族,因此,对于 C.C++ 和 Java 程序员,可以很快熟悉这种新的语言.C# 已经分 ...

  4. vue 常用功能和命令

    1. vue-cli 构建项目 # 全局安装 vue-cli $ npm install --global vue-clif # 创建一个基于 webpack 模板的新项目 $ vue init we ...

  5. zabbix4.2学习笔记--TCP状态监控

    Tcp的连接状态对于我们web服务器来说是至关重要的,尤其是并发量ESTAB:或者是syn_recv值,假如这个值比较大的话我们可以认为是不是受到了攻击(例如SYN攻击),或是是time_wait值比 ...

  6. expdp dblink

    客户端创建dblik create public database link [link_name] connect to {username} identified by "{passwo ...

  7. Spring Boot . 2 -- 用Spring Boot 创建一个Java Web 应用

    通过 start.spring.io 创建工程 通过 IDEA 创建工程

  8. 四种方案解决ScrollView嵌套ListView问题 [复制链接]

    以下文章转自@安卓泡面 在工作中,曾多次碰到ScrollView嵌套ListView的问题,网上的解决方法有很多种,但是杂而不全.我试过很多种方法,它们各有利弊. 在这里我将会从使用ScrollVie ...

  9. 洛谷——P2613 【模板】有理数取余

    P2613 [模板]有理数取余 读入优化预处理 $\frac {a}{b}\mod 19620817$ 也就是$a\times b^{-1}$ $a\times b^{-1}\mod 19620817 ...

  10. django-2 models

    一个model 对应DB的一张表 models 以类的形式表现: 一些字段.数据的一些行为 对类.类的对象 操作,无需写SQL = >  object relation mapping  ORM ...