Abh*_*mar 10 sql sql-order-by oracle10g
这是我的NEWSPAPER表.
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
Run Code Online (Sandbox Code Playgroud)
当我运行此查询
select feature,section,page from NEWSPAPER
where section = 'F'
order by page;
Run Code Online (Sandbox Code Playgroud)
它给出了这个输出
Doctor Is In F 6
Obituaries F 6
Births F 7
Classified F 8
Run Code Online (Sandbox Code Playgroud)
但在Kevin Loney的Oracle 10g Complete Reference中输出就是这样的
Obituaries F 6
Doctor Is In F 6
Births F 7
Classified F 8
Run Code Online (Sandbox Code Playgroud)
请帮我理解它是怎么回事?
如果您需要在子句的第一列中的两个值相同时进行可靠,可重现的排序ORDER BY,则应始终提供另一个辅助列以进行排序.虽然您可能会假设他们将根据输入的顺序(几乎总是根据我的知识,但要注意SQL标准没有指定任何形式的默认排序)或索引来排序自己,你永远不应该(除非它特别记录了你正在使用的引擎 - 即使那时我个人也从不依赖它.
如果您希望按页面内的功能按字母顺序排序,则您的查询应为:
select feature,section,page from NEWSPAPER
where section = 'F'
order by page, feature;Run Code Online (Sandbox Code Playgroud)
在关系数据库中,表是集合并且是无序的.该order by子句主要用于输出目的(以及一些其他情况,例如包含子查询rownum).
这是一个很好的起点.SQL标准没有规定当a上的键order by相同时必须发生的事情.这是有充分理由的.可以使用不同的技术进行分类.有些可能是稳定的(保留原始顺序).有些方法可能不是.
关注相同的行是否在集合中,而不是它们的排序.顺便说一句,我认为这是一个不幸的例子.这本书的例子不应该含糊不清.
| 归档时间: |
|
| 查看次数: |
11978 次 |
| 最近记录: |