16

これは私の 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

このクエリを実行すると

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

しかし、Kevin Loney の Oracle 10g Complete Reference では、出力は次のようになります。

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

それがどのように起こっているかを理解するのを手伝ってください。

4

3 に答える 3

13

句の最初の列の2つの値が同じであるときに、信頼性と再現性のある順序付けを行う必要がある場合ORDER BYは、常に別の2番目の列を指定して順序付けする必要があります。入力された順序(ほとんどの場合、私の知る限りですが、SQL標準ではデフォルトの順序の形式が指定されていないことに注意してください)またはインデックスに基づいてソートされると想定できる場合がありますが、(それがない限り)絶対にすべきではありません。使用しているエンジンについて具体的に文書化されていますが、それでも個人的にはこれに依存することはありません)。

各ページ内の機能によるアルファベット順の並べ替えが必要な場合のクエリは、次のようになります。

SELECT feature,section,page FROM NEWSPAPER
WHERE section = 'F'
ORDER BY page, feature;
于 2012-12-27T16:51:17.850 に答える
11

リレーショナル データベースでは、テーブルはセットであり、順序付けされていません。このorder by句は、主に出力目的で使用されます (および を含むサブクエリなどの他のいくつかのケースrownum)。

ここから始めるのがよいでしょう。order bySQL 標準では、 のキーが同じ場合に何が起こるかを指定していません。これには正当な理由があります。ソートにはさまざまな手法を使用できます。一部は安定している可能性があります (元の順序が維持されます)。一部のメソッドはそうでない場合があります。

順序ではなく、同じ行がセット内にあるかどうかに注目してください。ところで、これは残念な例だと思います。本の例にはあいまいな並べ替えがあってはなりません。

于 2012-12-27T16:52:07.103 に答える