sql-按列排序(该列具有所有空值)

sql-按列排序(该列具有所有空值),sql,Sql,我有以下结果集: 别名|借方 Select M1.alias, F1.D11 As debitAmt from Master1 M1 inner join Folio1 F1 on F1.MasterCode = M1.Code order by M1.alias 如果上面的order by alias中没有值,它是如何执行的?也许,您可以使用连接的操作列D11来管理要排序的空列 | 70009 | 5500 | 1100000 | 0

我有以下结果集:

别名|借方

Select M1.alias, F1.D11 As debitAmt
from Master1 M1 inner join Folio1 F1 on F1.MasterCode = M1.Code
order by M1.alias

如果上面的order by alias中没有值,它是如何执行的?

也许,您可以使用连接的操作列
D11
来管理要排序的空列

    |   70009

    |   5500

    |   1100000

    |   0

    |   81400
当上面没有值时,如何执行order by alias

与任何其他具有关联的值的排序方式相同。事实并非如此

SQL表表示无序集。当键中存在连接时,没有可依赖的“默认”排序,因此排序是任意的。它不仅是任意的,而且可能会从一次运行到下一次运行

如果需要更规范的排序,请添加其他排序键,以便排序键唯一地标识每一行。然后排序是稳定的,这意味着每次都返回相同的结果

当上面没有值时,如何执行order by alias

排序方式取决于DBMS:

  • DBMS可以从统计表数据中看到所有值都为空,只需忽略
    ORDER BY
    子句。(这同样适用于所有行在列中都包含一个值的情况,但所有行的值都相同。)
  • 如果DBMS看不到或不关心,它将对行进行排序。但是由于所有的值都是空的,所以没有一行必须位于另一行之前。不需要排序。根据内部排序算法的不同,已经任意的行顺序可能保持不变或被洗牌

结果是:无论内部如何处理
orderby
子句,都会得到一个不确定的顺序。顺便说一句,对于没有任何ORDER BY子句的查询也是如此。

空值在结果中要么排在第一位,要么排在最后一位。您自己回答!如果要控制排序,请使用例如,
order by m1.alias nulls last
nulls first
Select M1.alias, F1.D11 As debitAmt
from Master1 M1 inner join Folio1 F1 on F1.MasterCode = M1.Code
order by M1.alias, F1.D11