按顺序依赖空值的顺序是否安全?

时间:2015-02-06 14:27:27

标签: java database oracle null sql-order-by

我刚刚看到这段代码,对我来说似乎有点脆弱:

String statement = "select * from SOURCE where category = ? order by sub_category desc";
...
List<Source> results = query.list();

/* If we get more than one result return the one with the null sub-category 
 (the 'order by' should make the first record the one with the null): */
if(results.size() > 0) {
    return results.get(0);
}else{
    return null;
}

无论如何我会重构它,但我的好奇心被点燃了!

依赖order by子句中的空值排序是否安全?订购数据库是特定的还是有供应商独立的共识?

1 个答案:

答案 0 :(得分:4)

空值的排序是特定于数据库的。比方说,MSSQL将空值视为“小于任何其他值”,因此在排序ASC时首先出现空值,如果排序DESC则为空。 Oracle默认将空值视为“大于任何其他值”,但它具有特殊语法,ORDER BY列ASC | DESC NULLS FIRST | LAST,因此开发人员可以显式地将空值放入所需位置。等等。