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 -- 取所

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条嘞?想不明白】 21,kl,100

20,jk,8

19,gh,8

18,aas,18

17,qw,19

16,tt,8

15,ww,15

14,hh,13

13,gg,16

12,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

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

mysql查询第10到第20条记录_“取出数据表中第10条到第20条记录”的sql语句+selecttop用法...相关推荐

  1. mysql 取出20条数据_“取出数据表中第10条到第20条记录”的sql语句+select top 使用方法...

    1.首先.select top使用方法: select * from table --  取全部数据.返回无序集合 select top n * from table -- 依据表内数据存储顺序取前n ...

  2. mysql为什么行数据库_关系数据表中的行称为什么?

    在一个二维表中,水平方向的行称为元组,每一行是一个元组:元组对应表中的一个具体记录. 数据元组也称为记录.一个数据表中的每一个记录均有一个惟一的编号(记录号).一个记录也就是数据表中的一行. 元组(t ...

  3. mysql中标记某条数据库_一个关系数据库表中的各条记录可以什么

    一个关系数据库表中的各条记录前后顺序可以任意颠倒,不影响数据库中数据的实际意义.一个关系数据库的表中有多条记录,记录之间的前后顺序并不会对库中的数据关系产生影响,所以行的顺序是无所谓的,可以任意颠倒. ...

  4. 在access中一列称为_在数据表中,每一行称为一条____,每一列称为一个____。

    [填空题]Access提供了两种字段数据类型,用于保存文本或文本和数字的组合数据,这两种数据类型是____和____. [单选题]Access中,一个数据表最多可以建立()个主键. [单选题]The ...

  5. mysql删除表中的一列数据_在数据表中添加或删除一列

    注意: 我们希望能够尽快以你的语言为你提供最新的帮助内容. 本页面是自动翻译的,可能包含语法错误或不准确之处. 我们的目的是使此内容能对你有所帮助. 可以在本页面底部告诉我们此信息是否对你有帮助吗? ...

  6. mysql查询每个部门工资最高的员工信息_获取每个部门中当前员工薪水最高的相关信息...

    79 目前的一些"正确答案"其实不对,因为emp_no是随机返回的,而不是与最大工资相对应的那个 [知识点] 使用group by子句时,select子句中只能有聚合键.聚合函数. ...

  7. mybatis中查询字段为空时需要赋值_当数据表中的列和需要返回的对象的属性不完全一致, MyBatis是不会自动赋值的。此时,就可以使用【】元素进行处理。...

    [判断题]在 Windows7中,回收站与剪贴板一样,是内存中的一块区域.(1.0分) [填空题]在 Windows7中,若要选定多个连续的文件时,可先单击要选定的第一个文件,然后按下()键,再单击最 ...

  8. php 点击按钮更新mysql_PHP与mysql超链接 有更新按钮 跳转更新,删除后数据表中的数据 怎么做来着?...

    a.php文件<?php $con=mysql_connect("localhost","root","root")ordie(&qu ...

  9. mysql杠杆加号什么意思_对tb_book表中的数据,按ID序号进行升序排列,查询语句是什么?_学小易找答案...

    [单选题]修改数据库表结构用以下哪一项 ( ) [单选题]对于一个微小物理量,通常采用将其进行放大的方法实现测量,以下哪个不是物理实验方法? [单选题]扭摆实验中,为了测出金属匀质细杆绕质心对称轴的转 ...

最新文章

  1. Python:两个队列实现栈,两个栈实现队列
  2. 程序员怎么长久保持新鲜感?
  3. 2018-2019-2 20175204 张湲祯 实验五《网络编程与安全》实验报告
  4. 简单的聊聊,顺便招前端
  5. main.c(53): error: #268: declaration may not appear after executable statement in block
  6. 《中学生可以这样学Python》84节配套微课免费观看地址
  7. STM32中assert_param的使用
  8. jquery.uploadify php,jquery组件Uploadify的使用
  9. TinyPNG 智能PNG和JPEG图片压缩
  10. MYSQL误删数据恢复
  11. 制作卡通人物的3种简单方法
  12. 离散求边缘密度_密度梯度理论简介——半导体器件仿真
  13. 系统时间与服务器时间同步出错,Win7电脑时间同步出错是怎么回事?系统时间同步失败如何解决?...
  14. matlab矩阵四分位数,中位数,四分位数
  15. 南京信息工程大学python期末考试_南京信息工程大学的雷丁学院怎么样?
  16. 计算机恢复桌面,桌面图标打开方式怎么还原_电脑图标打开方式恢复方法-win7之家...
  17. 磁盘列阵 Raid
  18. FPGA之VGA转HDMI之并行串行转换模块编写
  19. 【技术】5G技术的应用场景及发展趋势
  20. C\C++中getchar()函数

热门文章

  1. win10 无法安全地连接到此页面 TLS安全设置未设置为默认 该怎么办? 无法访问此页面
  2. 【Pytorch】Tensor.contiguous()使用与理解
  3. pip清华源(清华大学国内镜像)安装地址
  4. 《稀缺》塞德希尔·穆来纳森 / 埃尔德·沙菲尔
  5. @linux安装及使用(压缩|解压)工具RAR
  6. java识别照片是彩色还是黑白照
  7. c语言getch 头文件,用getch()需要头文件吗?
  8. 软件测试工程师面试题汇总
  9. python打包加密工具:Pyinstaller和Nuitka
  10. ubuntu下 vim工具的安装与使用教程(一)