mysql查询第11到20条数据_“取出数据表中第10条到第20条记录”的sql语句+se。。。

mysql查询第11到20条数据_“取出数据表中第10条到第20条记
录”的sql语句+se。。。
1.⾸先。select top使⽤⽅法:
智能会议系统 ABCDMIXselect*fromtable
--  取全部数据。返回⽆序集合
selecttopn *fromtable-- 依据表内数据存储顺序取前n条,返回⽆序集合
select*fromtableorderbyiddesc--
取全部数据。按id逆序返回有序列表
selecttopn *fromtableorderbyiddesc--
先按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("");
水管堵头
Statement ateStatement();
ResultSet result =  uteQuery(sql);
while (()) {
System.out.Int(1)+","+String(2)+","+String(3));铝合金切削液配方
}
System.out.println("");
con.close();
statement.close();
result.close();
con=null;
statement=null;
result=null;
结果:
3,as,9
16,tt,8  【三者顺序事先不能确定】
19,gh,8
20,jk,8
6,bb,7
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
-------------------------------引⽤開始-----------------------------------
数据表例如以下:
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的细节,还是没有搞明确呢,往后再多看看-多实践再总结咯

本文发布于:2024-09-23 03:16:23,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/3/243227.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:排序   返回   数据   查询   顺序   注意   属性   知道
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议