`
yanguz123
  • 浏览: 556032 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

数据库取前几条记录的语句

阅读更多

数据库取前几条记录的语句
1. ORACLE
SELECT * FROM TABLE1 WHERE ROWNUM<=N
2. INFORMIX
SELECT FIRST N * FROM TABLE1 where 1=1
3. DB2
SELECT * ROW_NUMBER() OVER(ORDER BY COL1 DESC) AS ROWNUM WHERE ROWNUM<=N
或者
SELECT COLUMN FROM TABLE where 1=1 FETCH FIRST N ROWS ONLY
4. SQL SERVER
SELECT TOP N * FROM TABLE1 where 1=1
or
SET ROWCOUNT N SELECT * FROM TABLE1 where 1=1 SET ROWCOUNT N1
5. SYBASE
SET ROWCOUNT N SELECT * FROM TABLE1 where 1=1 SET ROWCOUNT N1
6. MYSQL
SELECT * FROM TABLE1 where 1=1 LIMIT N
7. FOXPRO
SELECT * TOP N FROM TABLE ORDER BY COLUMN
8. ACCESS
SELECT TOP N * FROM TABLE1 where 1=1


 1. Oracle数据库
  
  SELECT * FROM TABLENAME WHERE ROWNUM <= N
  
  2. Infomix数据库
  
  SELECT FIRST N * FROM TABLENAME
  
  3. DB2数据库
  
  SELECT *
  FROM (SELECT * ROW_NUMBER() OVER({ORDER BY COL1 DESC}) AS ROWNUM FROM TABLENAME)
  WHERE ROWNUM <= N
  或者
  SELECT COLUMN FROM TABLENAME FETCH FIRST N ROWS ONLY
  
  4. SQL Server数据库
  
  SELECT TOP N * FROM TABLENAME
  
  5. Sybase数据库
  
  SET ROWCOUNT N
  GO
  SELECT * FROM TABLENAME
  
  6. MySQL数据库
  
  SELECT * FROM TABLENAME LIMIT N
  
  7. FoxPro数据库
  
  SELECT * TOP N FROM TABLENAME ORDER BY COLUMN
  
  
  Top关键字:
  1、首先引用一位网友出错的例子,sql="select top 30 * from data where title='"&title1&"' order by id desc"
  分析出错原因:sql语句里同时存在where和top语句的时候,并且where条件列不是合适的索引,程序执行的是全表扫描,首先是查找符合where条件的记录,而这里的top限制形同虚设。如果全表是百万级别以上的数据表,那么就这么一个简单的判断,就有可能拖垮数据库。
  2、解决办法就是去掉where条件筛选语句,如果你希望使用selcet top语句,并且还要附带where条件,那么条件中的列就得是合适的索引,如聚集索引、复合索引里的主列等,同时,where条件里也要尽量避开使用函数,or,判断NULL等会引起全部扫描的语句。这一点要记住,不然执行的是全表扫描。
  3、如何选出第N条到第2N条记录呢。这样的sql语句就可以了:
  “select top n * from TABLE_NAME where id not in (select top n id from TABLE_NAME order by id desc)"
  4、对Top基本理解下(TOP 和 SET ROWCOUNT)
  SELECT 语句中的TOP子句限制单个查询返回的行数,而SET ROWCOUNT限制所有后续查询影响的行数。在很多编程任务中这些命令提供了高效率。
  
  SET ROWCOUNT在SELECT,INSERT,UPDATE OR DELETE语句中设置可以被影响的最大行数。这些设置在命令执行时马上生效并且只影响当前的会话。为了移除这个限制执行SET ROWCOUNT 0。一些实际的任务用TOP or SET ROWCOUNT比用标准的SQL命令对编程是更有效率的。让我们在几个例子中证明:
  
  在几乎所有的数据库中最流行的一个查询是请求一个列表中的前N项。在 pubs数据库案例中,我们可以查找销售最好CD的前五项。比较用TOP,SET ROWCOUNT和使用ANSI SQL的三种方案。
  (1)Select title,ytd_salesFrom titlesa Where (select count(*)From titlesb Where b.ytd_sales>a.ytd_sales)<5 Order by ytd_sales DESC
  这个纯ANSI SQL方案执行一个效率可能很低的关联子查询,特别的在这个例子中,在ytd_sales上没有索引支持。另外,这个纯的标准SQL命令没有过滤掉在ytd_sales的空值,也没有区别多个CD间有关联的情况。
  (2)SET ROWCOUNT 5 SELECT title, ytd_salesFROM titlesORDER BY ytd_sales DESCSET ROWCOUNT 0
  (3)SELECT TOP 5 title, ytd_salesFROM titlesORDER BY ytd_sales DESC
  第二个方案使用SET ROWCOUNT来停止SELECT查询,而第三个方案是当它找到前五行时用TOP n来停止。在这种情况下,在获得结果之前我们也要有一个ORDER BY子句强制对整个表进行排序。两个查询的查询计划实际上是一样的。然而,TOP优于SET ROWCOUNT的关键点是SET必须处理ORDER BY子句所需的工作表,而TOP 不用。
  总结:在一个大表上,我们可以为表上创建一个索引以避免排序,查询将使用该索引找到前5行并停止。
  
  ROWNUM伪列:
  1、使用SELECT语句返回的结果集,希望按特定条件查询前N条记录,可以使用伪列ROWNUM。ROWNUM是对结果集加一个伪列,先查到结果集后再加上一个列,是符合条件结果的序列号;从1开始排起,只能用< > = !=这些比较符合。
  ROWNUM对于等于某值的查询条件,比如查询第一条记录,可以使用ROWNUM=1作为条件;但是如果查询第二条记录写ROWNUM=2则查询不到数据,ROWNUM的=判断只对于1有效;
  2、同理,查询大于某值的查询条件,ROWNUM>n(n>1的自然数)这种条件不成立;那如何查询第一行以后的记录呢?
  solution:用子查询解决,但是必须为rownum设置别名,"select * from (select rownum no ,id,name from table1) where no >1";
  3、ROWNUM对于小于某值的查询是可以的,select * from table1 where rownum<3
  4、ROWNUM和排序
  Oracle中rownum是在取数据时产生的序号,想对指定排序的数据指定rownum行数据就要做处理了:
  "select rownum,id,name from table1 order by name",查询结果按name排序,但是rownum不是按1、2、3...排列,而是按记录插入时的顺序给记录排号;
  solution:使用子查询,select rownum ,id,name from(select * from table1 order by name)

分享到:
评论

相关推荐

    几种数据库常见分页sql

    都涉及到与数据库的交互,如果数据库中数据量很大的话,一次检索所有的记录,会占用系统很大的资源,因此我们常常采用,需要多少数据就只从数据库中取多少条记录,即采用分页语句。根据自己使用过的内容,把常见...

    mysql 前几条记录语句之(limit)

    mysql 的 top 方法 limit,用来获取数据库查询的前几天记录。

    达梦数据库_SQL语言手册

    修改操作的对象也可以是元组的集合,相对于面向记录的数据库语言一次只能操作一条记录来 语言的使用简化了用户的处理,提高了应用程序的运行效率 语言简洁,方便易学 语言功能强大,格式规范,表达简洁,接近英语的语法...

    数据库操作语句大全(sql)

    14、说明:前10条记录 select top 10 * form table1 where 范围 15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等....

    几条使用率最高的SQL语句

    [SQL]几条使用率最高的SQL语句 : 创建表(含多个字段)/删除表格(所有记录)/删除表/备份表 常用Select操作:1.为结果集中的列指定别名(新列名)/2.消除取值重复的行/3.限制返回行数 修改字段值:1.修改某一字段前几个字符...

    采用JDBC进行数据库分页查询

    一次只从数据库中查询最大maxCount条记录 * @param sql 传入的sql语句 * @param startNo 从哪一条记录开始 * @param maxCount 总共取多少条记录 */ public void getData(String sql... //最大查询到第几条记录.........

    常用SQL 语句大全

    14、前10条记录 15、选择每组中的最大数 第三部分、 技巧 1、True/False的使用 2、收缩数据库 3、压缩数据库 dbcc shrinkdatabase(dbname) 4、转移数据库给新用户以已存在用户权限 5、检查备份集 6、修复...

    pdo的mysql数据库操作类.zip

    queryrow:返回为单条记录 3. queryforint:查询单字段,返回整数 4. queryforfloat:查询单字段,返回浮点数(float) 5. queryfordouble:查询单字段,返回浮点数(double) 6. queryforobject:查询...

    东北大学软件学院程序实践(四)数据库实验报告

    2.利用INSERT语句向每张表中以上四条记录; 3.写SQL语句检索两个出版人之一(比如说是Addison Wesley和McGraw Hill)所出版书籍的标题和价格,列出你所用到的所有选择、投影和连接操作,并说明各个操作在查询中的...

    数据库内测版.doc

    6.设A.B两个表的记录数分别为3和4,对两个表执行交叉联接查询,查询结果中最多可获得(12)条记录。 7.设A.B两个表的记录数分别为8和10,对两个表执行等值连接查询,查询结果中最多可获得( )条记录。 8.字符串常量...

    pdo的mysql数据库操作类

    2. queryrow:返回为单条记录 3. queryforint:查询单字段,返回整数 4. queryforfloat:查询单字段,返回浮点数(float) 5. queryfordouble:查询单字段,返回浮点数(double) 6. queryforobject:查询单字段,返回对象,...

    php实现PDO的mysql数据库操作类

    2. queryrow:返回为单条记录 3. queryforint:查询单字段,返回整数 4. queryforfloat:查询单字段,返回浮点数(float) 5. queryfordouble:查询单字段,返回浮点数(double) 6. queryforobject:查询单字段,返回对象,...

    Qt数据库封装类

    记录集游标是否在第一条记录之前,参数为记录集标识 bool recBOF(int idx = -1) const; ---------------------------------------- 删除一个表 bool dropTable(const QString); -----------------------------------...

    php实现PDO的mysql数据库操作类.zip

    queryrow:返回为单条记录 3. queryforint:查询单字段,返回整数 4. queryforfloat:查询单字段,返回浮点数(float) 5. queryfordouble:查询单字段,返回浮点数(double) 6. queryforobject:查询...

    经典全面的SQL语句大全

     14、说明:前10条记录 select top 10 * form table1 where 范围  15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,...

    经典SQL语句大全

    14、说明:前10条记录 select top 10 * form table1 where 范围 15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)...

    基于命令行的简单数据库系统

     每条记录占一行,一行中的数据每列之间以逗号分隔。 注意:实际提交后测试的数据文件中的数据量可能会比较大,几万条,上百兆。  举例:(上面建立的student表的数据)  1,aaa,97  2,bbb,87  3,ccc,56   c)...

    数据库系统概论实验指导书.doc

    向输入表中的记录:(每个表最少5条记录,其中一条是与自己相关的真实记录) 1.7思考题: 1. 从用户角度看,数据库系统都有哪些体系结构? 2. 数据库管理系统通常由哪几部分组成? 3. 如何用SQL语句完成上述的工作? ...

    sql+ado交通灯

    但如果你要频繁访问数据库,并要返回很多记录集,那么,你应该使用全局_ConnectionPtr接口创建一个数据连接,然后使用_CommandPtr接口执行存储过程和SQL语句。 _RecordsetPtr是一个记录集对象。与以上两种对象相比...

    通用数据库分析工具

    3.支持海量数据的分割导出(每多少条数据记录一个文件,目前只支持表中有单个字段的唯一索引) 4.支持异步查询,这对大量数据查询时十分有效(一般情况下,这种查询会超时,异步查询不会,边查询边显示数据,注意...

Global site tag (gtag.js) - Google Analytics