plsql怎样根据表的行号查询数据
1个回答
展开全部
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 VT.NAME;
分析:对比1和2, 同一级的查询, ORDER BY排序不会影响ROWNUM编号(先产生ROWNUM后排序)
SQL3). SELECT ROWNUM,VT2.* FROM (SELECT VT.* FROM V$TABLESPACE VT ORDER BY VT.NAME) VT2;
分析:如希望用排序后的结果编号,则需将排序放在子查询中,再取ROWNUM
SQL4). SELECT * FROM (SELECT ROWNUM ,VT.* FROM V$TABLESPACE VT WHERE ROWNUM <10 ORDER BY VT.NAME) WHERE ROWNUM = 3;
无数据,分析:ROWNUM为全局伪列, 在解析时优先级高于子查询中的ROWNUM列
SQL5). SELECT * FROM (SELECT ROWNUM RN,VT.* FROM V$TABLESPACE VT WHERE ROWNUM <10 ORDER BY VT.NAME) A WHERE A.RN = 3;
得到指定行的数据,分析:子查询中ROWNUM编号需定义别名(本例中为"RN")后方可在条件中使用
如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 VT.NAME;
分析:对比1和2, 同一级的查询, ORDER BY排序不会影响ROWNUM编号(先产生ROWNUM后排序)
SQL3). SELECT ROWNUM,VT2.* FROM (SELECT VT.* FROM V$TABLESPACE VT ORDER BY VT.NAME) VT2;
分析:如希望用排序后的结果编号,则需将排序放在子查询中,再取ROWNUM
SQL4). SELECT * FROM (SELECT ROWNUM ,VT.* FROM V$TABLESPACE VT WHERE ROWNUM <10 ORDER BY VT.NAME) WHERE ROWNUM = 3;
无数据,分析:ROWNUM为全局伪列, 在解析时优先级高于子查询中的ROWNUM列
SQL5). SELECT * FROM (SELECT ROWNUM RN,VT.* FROM V$TABLESPACE VT WHERE ROWNUM <10 ORDER BY VT.NAME) A WHERE A.RN = 3;
得到指定行的数据,分析:子查询中ROWNUM编号需定义别名(本例中为"RN")后方可在条件中使用
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询