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

来源:互联网 发布:卫龙淘宝旗舰店 编辑:程序博客网 时间:2024/05/18 02:35

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

 

SELECT语句

 

结果集排序

标准(Standard)

SQL标准指出关系(relation)是未排序的,但结果集可能在通过游标返回时被排序:

 

DECLARE cursorname CURSOR FOR

SELECT … FROM … WHERE …

ORDER BY column_name1, column_name2, …

 

如上所述,标准并不允许将ORDER BY子句放置在除游标以外的其它地方。但也存在一些特例,如window函数中的ORDER BY(包括ROW_NUMBER) OVER… RANK() OVER…)

 

标准中未指定在排序比较中NULL值与非NULL值的比较规则,但所有的NULL在排序中被视为一样的值,而且所有的NULL值必须排于非NULL值之前或之后。

PostgreSQL

除了在游标定义中,PostgreSQL还支持在别的上下文中使用ORDER BYNULL值被视为比非NULL

DB2

除了在游标定义中,DB2还支持在别的上下文中使用ORDER BYNULL值被视为比非NULL

MS SQL Server

除了在游标定义中,PostgreSQL还支持在别的上下文中使用ORDER BYNULL值被视为比非NULL

MySQL

除了在游标定义中,PostgreSQL还支持在别的上下文中使用ORDER BY

 

NULL值被视为比非NULL,除非在列名前加上-(减号),而且ASC变为DESC,或DESC变为ASC;似乎在列名前加-(减号)的特性未被记入文档。

Oracle

除了在游标定义中,PostgreSQL还支持在别的上下文中使用ORDER BY

 

NULL值被视为比非NULL;虽然如此,可通过在ORDER BY表达式中添加NULLS FIRSTNULLS LAST来改变。

 

请注意Oracle将空字符串和NULL视为同一值。

 

 

原文参考:Comparison of different SQL implementations