如何ORDER BY子句工作,如果两个值相等?(How does order by clause w

2019-07-17 15:41发布

这是我的报纸表。

    National News   A   1
    Sports          D   1
    Editorials      A   12
    Business        E   1
    Weather         C   2
    Television      B   7
    Births          F   7
    Classified      F   8
    Modern Life     B   1
    Comics          C   4
    Movies          B   4
    Bridge          B   2
    Obituaries      F   6
    Doctor Is In    F   6

当我运行此查询

select feature,section,page from NEWSPAPER
where section = 'F'
order by page;

它给出了这样的输出

Doctor Is In    F   6
Obituaries      F   6
Births          F   7
Classified      F   8

但在凯文Loney的Oracle 10g的完全参考的输出是这个样子

Obituaries      F   6
Doctor Is In    F   6
Births          F   7
Classified      F   8

请帮助我了解它是如何发生的?

Answer 1:

在关系数据库中,表是集和是无序的。 的order by子句主要用于输出目的(和其他一些情况下,如含子查询rownum )。

这是一个良好的开端。 SQL标准没有规定什么人,何时,当上的按键order by是一样的。 这是有充分理由的。 不同的技术可用于分选。 有些人可能是稳定的(保留原来的顺序)。 有些方法可能不是。

聚焦在同一个行是否在集合,而不是他们的排序。 顺便说一句,我认为这是一个不幸的例子。 这本书不应该有各种各样的暧昧在它的例子。



Answer 2:

如果您需要可靠的,发生重复性订货两个值在ORDER BY子句中的第一列是相同的,你应该总是提供另一个次级柱也订上。 虽然你也许可以假设他们会根据输入的顺序排序本身(几乎总是这样的,据我所知,但要注意的是,SQL标准没有规定任何形式的默认排序)或索引,你不应该(除非它是专门记录为这样的你正在使用的引擎 - 即使如此,我个人从不依靠这一点)。

您的查询,如果您希望通过每个页面中的功能字母排序,应该是:

select feature,section,page from NEWSPAPER
where section = 'F'
order by page, feature;


文章来源: How does order by clause works if two values are equal?