rownum 是伪列,是系统加上的,不是真实存在的列,所以:
1. select * from tab_name where rownum<10 and rownum>1
查询语句查询不到结果,理由:对于rownum <10 的纪录中的第一条记录而言, rownum = 1 ,条件rownum >1 就把这条记录排除了,那么由于第一条记录被排除了那么导致第二条记录的rownum=1 ,仍然还是被排除了,直到最后一条记录都是被排除掉的;
2. select * from term where rownum<=10 and rownum>1
查询语句查询不到结果,理由同上;
3. select * from term where rownum<=10 and rownum>=1
可以查询到结果,rownum <= 10 取得的时前10条记录,都满足条件rownum >= 1,所以得到10条记录;
4. select * from term where rownum<10 and rownum>=1
可以查询到结果,rownum < 10 取得的时前9条记录,都满足条件rownum >= 1,所以得到9条记录;
而SQL SERVER中应该这样:SELECT *, ROW_NUMBER() OVER(ORDER BY SalesOrderID) AS rownum
FROM [tablename]结果如下:
rownum speaker track score
------ ---------- ---------- -----------
4 Kathy Sys 8
5 Michele Sys 8
6 Mike DB 8
或者
select IDENTITY(int, 1,1) AS ID_Num,* into #temp from 表
select * from #temp where ID_Num>10 and ID_Num<=20
1. select * from tab_name where rownum<10 and rownum>1
查询语句查询不到结果,理由:对于rownum <10 的纪录中的第一条记录而言, rownum = 1 ,条件rownum >1 就把这条记录排除了,那么由于第一条记录被排除了那么导致第二条记录的rownum=1 ,仍然还是被排除了,直到最后一条记录都是被排除掉的;
2. select * from term where rownum<=10 and rownum>1
查询语句查询不到结果,理由同上;
3. select * from term where rownum<=10 and rownum>=1
可以查询到结果,rownum <= 10 取得的时前10条记录,都满足条件rownum >= 1,所以得到10条记录;
4. select * from term where rownum<10 and rownum>=1
可以查询到结果,rownum < 10 取得的时前9条记录,都满足条件rownum >= 1,所以得到9条记录;
而SQL SERVER中应该这样:SELECT *, ROW_NUMBER() OVER(ORDER BY SalesOrderID) AS rownum
FROM [tablename]结果如下:
rownum speaker track score
------ ---------- ---------- -----------
4 Kathy Sys 8
5 Michele Sys 8
6 Mike DB 8
或者
select IDENTITY(int, 1,1) AS ID_Num,* into #temp from 表
select * from #temp where ID_Num>10 and ID_Num<=20