35 Stimmen

Vorteile der Verwendung der SQL-Ordinalpositionsnotation?

Hintergrundinformationen

Die Ordinalpositionsnotation, auch bekannt als Ordinale, ist eine Spaltenkurzschrift, die auf der Spaltenreihenfolge in der Liste der Spalten in der Datei SELECT Klausel anstelle des Spaltennamens oder des Spaltenalias. Üblicherweise unterstützt in der ORDER BY Klausel, einige Datenbanken (MySQL 3.23+, PostgreSQL 8.0+) unterstützen die Syntax für die GROUP BY Klausel auch.

Hier ist ein Beispiel für die Verwendung von Ordinalzahlen:

GROUP BY 1, 2
ORDER BY 1, 2

Es ist nicht gut zu verwenden, weil es die Abfrage brüchig macht - wenn sich die Spaltenreihenfolge ändert, müssen die Ordnungszahlen aktualisiert werden, oder Ihre Abfrage wird nicht das zurückgeben, was Sie dachten. Sehr wahrscheinlich würden Sie einen Fehler erhalten, wenn Sie in der GROUP BY wenn die Spalten an diesen Stellen in Aggregate eingeschlossen sind...

Die Frage

Der einzige Vorteil, den ich mir vorstellen kann, ist, dass weniger Daten über die Leitung gesendet werden müssen, wenn Sie keine gespeicherten Prozeduren oder Funktionen verwenden (die die Verwendung von Ordinalzahlen überflüssig machen, jedenfalls für mich). Gibt es noch andere Vorteile, die ich übersehe?

40voto

gbn Punkte 407102

Ich würde es benutzen:

  • Wenn Sie die Fehlersuche lieben
  • Erstellen von Adhoc-Abfragen ohne Intellisense

Es gibt keine positiven Aspekte.

SQL Server unterstützt ohnehin nur das ORDER BY. Überall sonst ist es ein Ausdruck, der ausgewertet werden muss.

16voto

mattmc3 Punkte 16673

Oft, wenn ich eine Tabelle mit vielen Spalten abfrage (in ad-hoc-Land nur für Daten Exploration ... Ich würde nie so für eine PROD-Umgebung programmieren), mache ich so etwas, um Felder, die mir wichtig sind, nahe beieinander zu haben:

select top 1000
  Col_1, Col_18, Col_50, Col_117, *
from
  TableWithTonsOfCols
order by
  1, 4 desc, 3

Wenn ich sage order by Col_1, Col_117 desc, Col_50 würde meine Abfrage kotzen, weil die Anweisung nicht wüsste, nach welchen Spalten ich ordnen wollte, weil sich der " * " verdoppelt. Nicht sehr häufig, aber dennoch eine nützliche Funktion.

6voto

D'Arcy Rittich Punkte 159655

Die beiden Anwendungsfälle für mich sind:

  • Wenn ich es eilig habe und nicht tippen will, verwende ich die Ordnungszahl. Ich würde diese immer in den Spaltennamen umwandeln, wenn ich sie nicht nur vorübergehend verwende
  • die Spalte, nach der ich bestelle, ist eine lange CASE Anweisung; anstelle der erneuten Eingabe der CASE Anweisung für die ORDER BY Klausel, verwende ich die Ordnungszahl, die es hält DRY . Es gibt Möglichkeiten, dies zu umgehen, z. B. mit CTEs, Unterabfragen oder Ansichten, aber ich finde oft, dass die Ordinalzahl die einfachste Lösung ist.

3voto

Gary Myers Punkte 34373

Ich neige jetzt dazu, Inline-Ansichten zu verwenden:

select col_a, count(*) from
  (select case ...... end col_a from ...)
group by col_a
order by col_a;

Aber in den Tagen, als sie noch nicht als gültige Syntax galten, war es hilfreich, den gesamten Text der Spalte neu zu tippen. Bei kniffligen Funktionen konnte es zu Diskrepanzen zwischen dem Wert in SELECT und ORDER BY kommen, z. B.

select ltrim(col_name,'0123456789')
from table
order by ltrim(col_name,'123456789')

Die '0' in der SELECT bedeutet, dass Sie nicht nach den von Ihnen ausgewählten Daten bestellen.

1voto

Perry Sugerman Punkte 167

Ich habe einen Algorithmus zur Abfragegenerierung - die SQL wird automatisch generiert. Die Verwendung der Ordnungszahl bedeutet, dass ich auf das generierte Feld verweisen kann, ohne den Feldnamen erneut abrufen zu müssen. Der Benutzer kann auf den Feldnamen in einer Tabelle verweisen, indem er ihn aus einer Liste auf dem Bildschirm auswählt. Solange die Liste mit der SQL übereinstimmt, brauche ich die Feldnamen nicht zu kennen, wenn die SELECT-Elemente ebenfalls ordinal sind.

Nach meiner Erinnerung war dies Ende der 1970er Jahre im SQL-Standard enthalten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X