select * from ( select rownum field_byname,d.* from (select b.*,c.loginaccount from jitums.tb_readers b, jitums.tb_rd_account c where b.reader_id= c.reader_id) d where rownum = 1;
select * from ( select rownum field_byname,b.* from ( select c.name cname,d.loginaccount,e.name from jitums.tb_readers c ,jitums.tb_rd_account d,jitums.tb_rd_type e where c.rdtypecode= e.rdtypecode and c.reader_id= d.reader_id ) b where rownum 0
三个表连接,其中两个表里有一列名字相同,得重命名c.name cnam
一般在项目开发的时候会经常用到,大批量数据不可能一次性加载到内存,这就会用到分页,分页就用到范围我是做.net的微软跟随者(呵呵,不要有分歧哦!java和.net在这个行业的口舌之战还未停休),时候也用oracle你说的这个范围查询在sql server里可能要好实现些,因为它有个top关键字.这个就不说了,,主要是说oracle.oracle 有个rownum关键字它的功能等同于sqlserver的top,rownum返回的是table的内部行号,查寻有多少条记录,它的行号就会从1一直递增到最后一条记录,而且这个递增是实时的.所以我们不能用常规的思想去查询.
例如:select * from tablename where rownum >=1000 and rownum select rownum field_byname,table_byname.* from tablename table_byname然后嵌入到下面括号
select * from ( select rownum field_byname,table_byname.* from tablename table_byname ) a where a.field_byname >= 1000 and a.field_byname 但效率不高,它查询了所有数据,然后从所有数据查询到1000到10000之间的行,根据笛卡尔积原理,冗余相当大.还有种方法对上面sql进行了改进,效率高很多
select * from ( select rownum field_byname,table_byname.* from tablename table_byname
where rownum = 1000
还可以写为:
select * from ( select a.*, rownum rn from (select * from jitums.tb_readers ) a where rownum 0
