主流数据库之间对SQL:2003标准的不同实现方法比较(第二部分 结果集排序)

翻译 2008年07月30日 14:20:00

本文严禁在未征得本人同意的情况下以任何形式进行转载。本人只接受在邮件中的转载申请,如需转载,请发送邮件至 @126.com。  

 

限制结果集<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

简单限制

 

目标:从结果集中取n行数据。通常与ORDER BY表达式联合使用。

 

备注1:这与top-n查询是不同的。

 

备注2:下面的一些查询并非在所有环境下均是合法的,比如在视图或子查询中。

 

标准(Standard)

IDT611的非核心特性指定window函数中的ROW_NUMBER()可以完成此功能:

SELECT * FROM (

   SELECT

      ROW_NUMBER() OVER (ORDER BY key ASC) AS rownumber,

      columns

FROM tablename

) AS foo

WHERE rownumber <= n

 

如果应用是有状态的(之于无状态的web应用),就可能需要使用游标特性了(ID E121的核心特性)。包括:

DECLARE cursor-name CURSOR FOR …

OPEN cursor-name

FETCH …

CLOSE cursor-name

PostgreSQL

不支持ROW_NUMBER()。支持游标(不仅在嵌入式、动态SQL中,而且在所有上下文中)

 

ROW_NUMBER()的替代解决方案:

 

SELECT columns

FROM tablename

ORDER BY key ASC

LIMIT n

 

注意LIMIT改变了SELECT … FOR UPDATE的语义

DB2

支持标准中的两种方法。对于一般性工作来说,可使用DB2的非标准语句来构造:

 

SELECT … FETCH FIRST n ROWS ONLY

MS SQL Server

支持表准中的两种方法。

 

MSSQL 2000不支持ROW_NUMBER()MSSQL 2000需要使用以下替代方法:

 

SELECT TOP n columns

FROM tablename

ORDER BY key ASC

 

TOP关键字在MSSQL 2005中依然可用。

MySQL

不支持标准。替代方案为:

 

SELECT columns

FROM tablename

ORDER BY key ASC

LIMIT n

Oracle

支持ROW_NUMBER。仿佛有非标准的游标工具。

 

由于Oracle在子查询的命名中不支持AS(在本例中无需对子查询命名),所以标准SQL代码需要进行简单修改:

 

SELECT * FROM (

SELECT

    ROW_NUMBER() OVER (ORDER BY key ASC) AS rownumber,

    Columns

FROM tablename

)

WHERE rownumber <= n

 

原文参考:Comparison of different SQL implementations

主流内存数据库简要比较

由本人搜集资料整理而成,如需转载请注明出处:http://blog.csdn.net/nanfeiyannan/article/details/9003009(谢谢) 主要内存数据库对比   ...
  • nanfeiyannan
  • nanfeiyannan
  • 2013年05月31日 23:15
  • 14969

主流nosql数据库对比

转自:http://asyty.iteye.com/blog/1202106 主流nosql数据库对比 博客分类:  NOSQL nosql数据库对比  目前开源的NOSQL数据...
  • suejl
  • suejl
  • 2016年02月23日 10:52
  • 829

Sql操作之二:不同数据库中表数据迁移

一:在同一服务器 insert  into   数据库name1.dbo.table_name2(字段名称1,字段名称2,……) select  字段名称1,字段名称2,…… from ...
  • llso9001
  • llso9001
  • 2016年02月02日 13:57
  • 2784

几款主流数据库的详细比较

http://blog.csdn.net/zhouhx08/article/details/7528254 开发数据库应用,选择一个好的数据库是非常重要的。目前,商品化的数据库管理系统以...
  • loongwong2011
  • loongwong2011
  • 2016年09月02日 09:28
  • 6756

实现两个数据库之间的数据同步

不同服务器数据库之间的数据操作   --创建链接服务器  exec sp_addlinkedserver   'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或i...
  • m15188153014
  • m15188153014
  • 2015年10月31日 17:11
  • 4952

十分钟轻松搞定两个不同数据库之间的数据交换

JadePool为广大Java工作者提供了许多简洁实用的方法,如果需要实现不同数据库之间的数据交换,使用JadePool十分方便。这是十分有价值的实践活动,比如,在网站的数据管理中,我们需要将远程数据...
  • wj800
  • wj800
  • 2013年03月04日 10:42
  • 1546

SQL不同服务器数据库之间的数据操作整理(完整版)

因为是转载文章 在此标明出处,以前有文章是转的没标明的请谅解,因为有些已经无法找到出处,或者与其它原因。 如有冒犯请联系本人,或删除,或标明出处。 因为好的文章,以前只想收藏,但连接有时候...
  • sat472291519
  • sat472291519
  • 2014年10月08日 13:39
  • 1907

三种主流数据库区别

Oracle Oracle 能在所有主流平台上运行(包括Windows)。完全支持所有的工业标准。采用完全开放策略。可以使客户选择最适合的解决方案。对开发商全力支持,Oracle并行服务器通过使...
  • wuliuwei1234
  • wuliuwei1234
  • 2017年08月01日 10:26
  • 2278

各种排序算法的实现,总结与比较

(一)排序基本概念:  根据排序过程中待排序文件存放的位置不同,可以把排序分为内部和外部排序两大类。在排序过程中,所有需要排序的数都在内存,并在内存中调整它们的存储顺序,称为内排序;在排序过程中,只有...
  • u010177286
  • u010177286
  • 2015年07月23日 17:29
  • 1277

五种主流数据库比较

开发数据库应用,选择一个好的数据库是非常重要的。目前,商品化的数据库管理系统以关系型数据库为主导产品, 技术比较成熟。面向对象的数据库管理系统虽然技术先进,数据库易于开发、维护,但尚未有成熟的产品。国...
  • shufac
  • shufac
  • 2014年04月15日 23:15
  • 1399
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:主流数据库之间对SQL:2003标准的不同实现方法比较(第二部分 结果集排序)
举报原因:
原因补充:

(最多只允许输入30个字)