与SQL Order By和nulls的数据库一致性

时间:2008-11-26 00:45:17

标签: sql null sql-order-by

我的数据库中有一个列(一个标志),其类型为varchar(1),填充为Y或NULL(这是它的原理,不在我的控件中)。

在SQL Server中,通过查询执行升序操作,在顶部排序NULL。这种行为是否应该与Oracle和DB2保持一致?

如果我在列上有一个COALESCE以确保它在查询中不为空,我是否可能遇到任何性能问题(由于表扫描等)?

修改

查询需要在所有3个数据库上保持一致,否则我将不得不在代码中处理它,因此我想使用COALESCE函数

修改

我之所以选择Pax作为答案,因为它处理了问题的两个部分并提供了有用的解决方法,但是,感谢me.yahoo.com/a/P4tXrx链接到here

3 个答案:

答案 0 :(得分:3)

我知道DB2 Express和DB2(至少高达v8)确实支持NULLS FIRST子句。

如果您想要便携式解决方案,则可能需要选择以下内容:

select * from tbl where fld is null
    union all select * from tbl where fld is not null

我认为联合的结果(至少在DB2中,你需要检查其他的)保证正确排序。

由于您为返回的每一行运行函数,因此合并具有性能影响。但是,它取决于数据库中的行数。

您可能不得不在代码中对两个不同的记录集进行两次查询,然后按顺序处理它们。

编辑:我刚刚检查了SQL标准,并且无法保证与UNION ALL连接的查询是按顺序排序的;他们可能是混在一起的。所以看起来你可能不得不求助于运行两个不同查询的代码,如上所述。

答案 1 :(得分:1)

  

在SQL Server中,通过查询执行升序操作,在顶部排序NULL。这种行为是否应该与Oracle和DB2保持一致?

Apparently this is a relative newcomer to the standard

  

SQL标准的核心功能没有明确定义Null的默认排序顺序。使用SQL:2003扩展T611“基本OLAP操作”,可以分别使用ORDER BY列表的NULLS FIRST或NULLS LAST子句在所有数据值之前或之后对空值进行排序。但是,并非所有DBMS供应商都实现此功能。未实现此功能的供应商可以在DBMS中为Null排序指定不同的处理方法。

答案 2 :(得分:0)

在oracle中你可以这样做:

ORDER BY value NULLS FIRST 

ORDER BY value NULLS LAST

在SQL Server中试用