SQL order by子句是否保证稳定(按标准)

时间:2013-03-20 11:51:56

标签: sql database sql-order-by

我正在使用以下查询来查询在两列上有订单的数据库。

  

从表1中选择a,b,c按asc,b asc;

排序

我的问题是,排序是否保证稳定(按标准)。虽然它没有任何意义,但不稳定,但我问这个,因为我在网上读到了

  

该标准并不妨碍使用稳定的排序,但它也是如此   不需要它。

1 个答案:

答案 0 :(得分:8)

不保证排序稳定。我认为SQL Server documentation对如何实现稳定排序有一个很好的解释:

  

使用OFFSET和查询请求之间获得稳定的结果   FETCH,必须满足以下条件:   查询使用的基础数据不得更改。也就是说,要么触摸行   由查询未更新或来自查询的所有页面请求   使用快照或在单个事务中执行   可序列化的事务隔离。有关这些的更多信息   事务隔离级别,请参阅SET TRANSACTION ISOLATION LEVEL   (的Transact-SQL)。 ORDER BY子句包含列或组合   保证唯一的列。

理解排序稳定的最简单方法是返回表的定义。表在SQL中本质上是无序的。因此,没有任何顺序可以依靠“稳定性”。

作为第二个考虑因素,可以并行实施分类。在大多数并行排序中,公共密钥被放在一起而没有关于其原始顺序的信息(除非在排序键中实现,无论是显式还是隐式)。