“取出数据表中第10条到第20条记录”的sql语句+select top 使用方法
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...
String sql="select top n-m+1 * from test where (id not in(select top m-1 id from test))";
//能够是正常顺序的第m条到第n条记录写法。非常推荐哦~
,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 使用方法的更多相关文章
- “取出数据表中第10条到第20条记录”的sql语句+selecttop用法
1.首先,select top用法: 参考问题 select top n * from和select * from的区别 select * from table -- 取所有数据,返回无序集合 sel ...
- 从数据表中随机抽取n条数据有哪几种方法(join实现可以先查数据然后再拼接)
从数据表中随机抽取n条数据有哪几种方法(join实现可以先查数据然后再拼接) 一.总结 一句话总结:最好的是这个:"SELECT * FROM table WHERE id >= (( ...
- 读取数据表中第m条到第n条的数据,SQL语句怎么写?
原文:读取数据表中第m条到第n条的数据,SQL语句怎么写? 对于MySQL或者Oracle来说,如果实现从Table 表中取出第 m 条到第 n 条的记录操作,我们需要TOP函数(不是所有的数据库都支 ...
- oracle通过sql随机取表中的10条记录
oracle通过sql随机取表中的10条记录: SELECT * FROM (SELECT * FROM T_USER ORDER BY DBMS_RANDOM.RANDOM()) WHERE Row ...
- SQL批量更新数据库中所有用户数据表中字段类型为tinyint为int
--SQL批量更新数据库中所有用户数据表中字段类型为tinyint为int --关键说明:--1.从系统表syscolumns中的查询所有xtype='48'的记录得到类型为[tinyint]的字段- ...
- MySQL查询数据表中数据记录(包括多表查询)
MySQL查询数据表中数据记录(包括多表查询) 在MySQL中创建数据库的目的是为了使用其中的数据. 使用select查询语句可以从数据库中把数据查询出来. select语句的语法格式如下: sele ...
- 默认情况下,不使用of子句表示在select所有的数据表中加锁(转)
Select …forupdate语句是我们经常使用手工加锁语句.通常情况下,select语句是不会对数据加锁,妨碍影响其他的DML和DDL操作.同时,在多版本一致读机制的支持下,select语句也不 ...
- Oracle中使用游标转换数据表中指定字段内容格式(拼音转数字)
应用场景:将数据表TB_USER中字段NNDP的内容中为[sannanyinv]转换为[3男1女] 主要脚本:一个游标脚本+分割字符串函数+拼音转数字脚本 操作步骤如下: 1.创建类型 create ...
- 批量替换数据库中所有用户数据表中字段数据类型为char和varchar到nvarchar的脚本
解决问题:字段类型为char的总是占用指定字节长度(末尾好多空白符号),varchar数据类型长度一个汉字占2个字节,内容存储为中文的字段个人建议全部使用nvarchar. 操作说明:打开SQL Se ...
随机推荐
- vue工程化之项目引入jquery
既然写项目,那么少不了用jq,那我们就引入进来吧 1.因为已经安装了vue脚手架,所以需要在webpack中全局引入jquery 打开package.json文件,在里面加入这行代码,jquery后面 ...
- python 2 encode and decode
https://docs.python.org/2/howto/unicode.html a Unicode string is a sequence of code points, which ar ...
- linux下设置python3.x为默认版本
rm /usr/bin/python ln -s /usr/local/bin/python3.x /usr/bin/python sybomlic 安装目录 系统目录
- selenium抓取动态网页数据
1.selenium抓取动态网页数据基础介绍 1.1 什么是AJAX AJAX(Asynchronouse JavaScript And XML:异步JavaScript和XML)通过在后台与服务器进 ...
- 珂朵莉树(Chtholly Tree)学习笔记
珂朵莉树(Chtholly Tree)学习笔记 珂朵莉树原理 其原理在于运用一颗树(set,treap,splay......)其中要求所有元素有序,并且支持基本的操作(删除,添加,查找......) ...
- 笔试算法题(18):常数时间删除节点 & 找到仅出现一次的两个数字
出题:给定链表的头指针和一个节点指针,要求在O(1)的时间复杂度下删除该节点 分析: 如果需要删除的节点为A,其前序节点为A-,其后续节点为A+,所以删除A之后,需要使得A-的下一个节点就是A+,常规 ...
- LUA-点号和冒号
由于LUA中是模拟类,没有class, 所以这里是使用.号来访问实例的成员 re.SetActive(re, re.activeSelf == false); 而冒号: 则是种语法糖,省略了上面代码 ...
- Error opening session. Cause: java.lang.NullPointerExcept.
在学mybatis时遇到这个问题,后面发现时打错了一个字母,发现后分享出来,如果发现这个错误也能够更好的排除错误. 如图可以发现我不小心把default打成了defaule所以出现了这个错误,也找了好 ...
- [Python3网络爬虫开发实战] 3.1.2-处理异常
前一节我们了解了请求的发送过程,但是在网络不好的情况下,如果出现了异常,该怎么办呢?这时如果不处理这些异常,程序很可能因报错而终止运行,所以异常处理还是十分有必要的. urllib的error模块定义 ...
- 零基础入门学习Python(4)--改进我们的小游戏
前言 在以前的博客中有做个一个小游戏,但是太简单了,所以这次就来对我们做的小游戏进行改进,改善从以下四个方面进行: 程序猜错的时候要给出提示,例如告诉用户输入的值是大了还是小了. 以前程序每运行一次只 ...