Wie funktioniert die Order-by-Klausel, wenn zwei Werte gleich sind?

8

Dies ist meine ZEITUNG Tabelle.

%Vor%

Wenn ich diese Abfrage ausführen

%Vor%

Es gibt diese Ausgabe

%Vor%

Aber in Kevin Lonys Oracle 10g Complete Reference ist die Ausgabe wie folgt

%Vor%

Bitte helfen Sie mir zu verstehen, wie es passiert?

    
Abhishek kumar 27.12.2012, 16:41
quelle

2 Antworten

7

In relationalen Datenbanken sind Tabellen Mengen und sind ungeordnet. Die Klausel order by wird hauptsächlich für Ausgabezwecke verwendet (und einige andere Fälle wie eine Unterabfrage, die rownum enthält).

Dies ist ein guter Anfang. Der SQL-Standard gibt nicht an, was geschehen muss, wenn die Schlüssel in order by identisch sind. Und das aus gutem Grund. Verschiedene Techniken können zum Sortieren verwendet werden. Einige könnten stabil sein (Erhaltung der ursprünglichen Reihenfolge). Einige Methoden sind möglicherweise nicht.

Konzentriere dich darauf, ob die gleichen Reihen in den Mengen sind, nicht ihre Reihenfolge. Übrigens würde ich dies als ein unglückliches Beispiel betrachten. Das Buch sollte in seinen Beispielen keine zweideutigen Sorten haben.

    
Gordon Linoff 27.12.2012, 16:52
quelle
7

Wenn Sie eine zuverlässige, reproduzierbare Sortierung benötigen, wenn zwei Werte in der ersten Spalte Ihrer ORDER BY -Klausel identisch sind, sollten Sie immer eine zweite Spalte angeben, in der auch sortiert werden soll. Während Sie vielleicht davon ausgehen können, dass sie sich selbst basierend auf der eingegebenen Reihenfolge sortieren (fast immer der Fall meines Wissens, aber beachten Sie, dass der SQL-Standard keine Form der Standardreihenfolge angibt) oder Index, sollten Sie niemals (außer es ist speziell für den von Ihnen verwendeten Motor dokumentiert - und selbst dann würde ich mich nie darauf verlassen.

Wenn Sie eine alphabetische Sortierung nach Merkmal auf jeder Seite wünschen, sollte Ihre Abfrage wie folgt lauten:

%Vor%     
taswyn 27.12.2012 16:51
quelle

Tags und Links