
rownum和Dual表,应该是Oracle所特有的东西。 SQL Server和Sybase都没有这个,其它的数据库不好说。 rownum关键字,是Oracle为查询返回的行,顺序分配的编号,当然也可以作为Where条件来使用。 Dual表:也是Oracle方便查询而使用的特殊表。Oracle内部机制可以确保该表始终只有一行一列一个X值。 下面是从网上找到的使用临时表的方法,因为没有Sql server环境,未测试,仅供参考: select rownum=identity(int,1,1),id,name into #t from table1 select from #t drop table #t 如果只想查询记录,可以参考下面的子查询代码: select from 表 where id = ALL (select id from 表); select from 表 where id <= ALL (select id from 表);
oracle数据库中用sql查询某表(ur_table_name )的第5到第8条数据的语句为:
SELECT FROM (SELECT a, ROWNUM rnFROM ur_table_name a)WHERE rn >= 5 AND rn <= 8 ;
之所以用rownum rn,是把rownum转成实例,因为rownum本身只能用 <=的比较方式,只有转成实列,才可做 >=的比较。
rowid和rownum都是伪列,但含义完全不同。rowid是物理地址,用于定位Oracle中具体数据的物理存储位置,而rownum则是sql的输出结果排序。通俗的讲:rowid是相对不变的,rownum会变化,尤其是使用order by的时候。
rowid 用于定位数据表中某条数据的位置,是唯一的、也不会改变
rownum 表示查询某条记录在整个结果集中的位置, 同一条记录查询条件不同对应的 rownum 是不同的而 rowid 是不会变的
第一个是从第几条开始,第二个是每页几条。
你看看你数据库里面的数据够不够分页,你这样只写两句就分页是不够的。
page = PaginatorshowPage(dao, hql, paramValues, pageCurrent, pageSize);
/
利用hql实现翻页
/
public static Page showPage(PersistentBaseDao pdao, String hql,
Object[] paramValues, int pageCurrent, int pageSize) {
// 入口参数校验(无)
if (pdao == null) {
// logdebug("Paginatorpdaohql is Empty");
}
if (hqlequals("") || hql == null) {
// logdebug("PaginatorshowPagehql is Empty");
}
if (pdao == null) {
// logdebug("PaginatorshowPagepdao is Empty");
}
PersistentBaseDao dao = (PersistentBaseDao) pdao;
// 如果当前页大于>总的页数,则让当前页等于总页数
int tempPageCount =0;
if (paramValues == null) {
tempPageCount = daogetPageCount(hql, (Object[]) null, pageSize);
} else {
tempPageCount= daogetPageCount(hql, paramValues, pageSize);
}
if (pageCurrent > tempPageCount) {
pageCurrent = tempPageCount;
}
// 如果当前页大于<1,则让当前页等于1
if (pageCurrent < 1) {
pageCurrent = 1;
}
// 调用daoserarch()方法
if (paramValues == null) {
page = daosearch(hql, pageCurrent, pageSize);
} else {
page = daosearch(hql, paramValues, pageCurrent, pageSize);
}
// 为page对象设置当前页的属性
pagesetPageCurrent(pageCurrent);
// 将page对象放在request对象中
return page;
}
/
利用List实现翻页
/
@SuppressWarnings("unchecked")
public static Page showPage(List list, int pageCurrent, int pageSize) {
// 入口参数校验(无)
if (listisEmpty()) {
// logdebug("PaginatorshowPagelist is Empty");
}
// 如果当前页大于>总的页数,则让当前页等于总页数
if (pageCurrent > pagegetPageCount()) {
pageCurrent = pagegetPageCount();
}
// 如果当前页大于<1,则让当前页等于1
if (pageCurrent < 1) {
pageCurrent = 1;
}
List ls = new ArrayList();
// 根据得到的list转化为page对象
if (listsize() % pageSize == 0) {
pagesetPageCount((listsize() / pageSize));
} else {
pagesetPageCount((listsize() / pageSize) + 1);
}
pagesetPageCurrent(pageCurrent);
pagesetRecordCound(listsize());
int stag = (pageCurrent - 1) pageSize;
int etag = pageCurrent pageSize;
for (int i = stag; i < listsize() && i < etag; i++) {
lsadd(listget(i));
}
pagesetDataList(ls);
return page;
}
PLSQL中查询语句的行号可以用ROWNUM(伪列)标识,
如SELECT ROWNUM,VT FROM V$TABLESPACE VT;
但PLSQL很少用行号查询数据库, 除非为了控制数据量
如SQLSERVER的SELECT TOP
或PLSQL的SELECT FROM <TABLE> WHERE ROWNUM =1, 或ROWNUM<10
进一步进行测试:
SQL1) SELECT ROWNUM,VT FROM V$TABLESPACE VT;
SQL2) SELECT ROWNUM,VT FROM V$TABLESPACE VT ORDER BY VTNAME;
分析:对比1和2, 同一级的查询, ORDER BY排序不会影响ROWNUM编号(先产生ROWNUM后排序)
SQL3) SELECT ROWNUM,VT2 FROM (SELECT VT FROM V$TABLESPACE VT ORDER BY VTNAME) VT2;
分析:如希望用排序后的结果编号,则需将排序放在子查询中,再取ROWNUM
SQL4) SELECT FROM (SELECT ROWNUM ,VT FROM V$TABLESPACE VT WHERE ROWNUM <10 ORDER BY VTNAME) WHERE ROWNUM = 3;
无数据,分析:ROWNUM为全局伪列, 在解析时优先级高于子查询中的ROWNUM列
SQL5) SELECT FROM (SELECT ROWNUM RN,VT FROM V$TABLESPACE VT WHERE ROWNUM <10 ORDER BY VTNAME) A WHERE ARN = 3;
得到指定行的数据,分析:子查询中ROWNUM编号需定义别名(本例中为"RN")后方可在条件中使用
1rownum分页查询:select t2 from (select t1,rownum as rn from table_name t1 where 1=1 and rownum <= page page_size) t2 where t2rn > (page - 1) page_size;2 row_number() over() 分页查询select t2 from (select t1,row_number() over(order by column_name desc) as rn from table_name t1 where 1=1 )t2 where t2rn > (page-1) page_size and t2rn <= page page_size;
select from (select ROWNUM r,t from student t
修改为
select from student
)student
<![CDATA[
where r > #current# and r <=#next#
order by id
修改为
<![CDATA[
order by id
LIMIT #current# , 每页多少行
注1: LIMIT 接受一个或两个数字参数。
参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。初始记录行的偏移量是 0(而不是 1)
也就是如果你是 每页 20 行的话。
就直接
LIMIT #current# , 20 吧
注2: 因为那个 第一个 初始记录行的偏移量是 0(而不是 1)
而我又不能
LIMIT #current# - 1, 20
因此你外部程序, 传参数的时候, 要自己 - 1 了, 再传进来。
以上就是关于sqlsever 里有没有rownum这样的方法全部的内容,包括:sqlsever 里有没有rownum这样的方法、数据库怎么查询 返回后5行的数据、在Oracle中有个rowid和rownum,他们是一样的吗有什么作用大神求解!!!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)