Chinaunix首页 | 论坛 | 博客
  • 博客访问: 586196
  • 博文数量: 772
  • 博客积分: 5000
  • 博客等级: 大校
  • 技术积分: 4980
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-17 13:02
文章分类

全部博文(772)

文章存档

2011年(1)

2008年(771)

我的朋友

分类:

2008-10-17 13:23:30


  
  这里描述的 SELECT N 包括这样几种情况:
  1. 选取TOP N行记录
  2. 选取N1-N2行记录
  3. 选取FOOT N行记录
  当然需要考虑是否有ORDER BY子句的情况, 下面试以系统视图CAT为例分别说明.
  注: A. 为没有ORDER BY的情况
  B. 有ORDER BY的情况
  
  1. 选取 TOP N 行记录
  A. SELECT * FROM CAT WHERE ROWNUM<=N
  B. SELECT * FROM
  ( SELECT * FROM CAT ORDER BY TABLE_TYPE )
  WHERE ROWNUM<=N
  
  2. 选取N1-N2行记录
  A. SELECT TABLE_NAME,TABLE_TYPE FROM
  ( SELECT ROWNUM ROWSEQ,TABLE_NAME,TABLE_TYPE FROM CAT )
  WHERE ROWSEQ BETWEEN N1 AND N2;
  或:
  SELECT * FROM CAT WHERE ROWNUM<=N2
  MINUS
  SELECT * FROM CAT WHERE ROWNUM  B. SELECT TABLE_NAME,TABLE_TYPE FROM
  ( SELECT ROWNUM ROWSEQ,X.* FROM (SELECT * FROM CAT ORDER BY TABLE_TYPE) X)
  WHERE ROWSEQ BETWEEN N1+1 AND N2;
  
  3. 选取FOOT N行记录
  这里是说明不知道记录集的记录个数的情况, 如果已知, 用上面2的方法即可
  A. SELECT TABLE_NAME,TABLE_TYPE FROM
  ( SELECT ROWNUM ROWSEQ,TABLE_NAME,TABLE_TYPE FROM CAT )
  WHERE ROWSEQ > ( SELECT COUNT(*)-N FROM CAT )
  B. SELECT TABLE_NAME,TABLE_TYPE FROM
  ( SELECT ROWNUM ROWSEQ,TABLE_NAME,TABLE_TYPE FROM CAT ORDER BY TABLE_TYPE)
  WHERE ROWSEQ > ( SELECT COUNT(*)-N FROM CAT )
  或
  SELECT * FROM
  ( SELECT TABLE_NAME,TABLE_TYPE FROM CAT ORDER BY TABLE_TYPE DESC)
  WHERE ROWNUM<=N
  
  以上在ORACLE8.1.5 for 2000pro 上通过
  
【责编:admin】

--------------------next---------------------

阅读(358) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~