Zurück zur Artikelliste Artikel
8 Leseminuten

Was bedeutet ORDER BY 1 in SQL?

Haben Sie jemals die "ORDER BY 1"-Syntax in SQL-Abfragen gesehen und sich gefragt, was sie bedeutet? In diesem Artikel werden wir diese Syntax untersuchen, ihren Zweck erklären und sie leichter verständlich machen.

Unabhängig davon, ob Sie ein erfahrener SQL-Benutzer sind oder gerade erst anfangen, diese Sprache zu erforschen, ist Ihnen die ORDER BY-Klausel wahrscheinlich schon einmal begegnet. In SQL wird die ORDER BY Klausel verwendet, um die Zeilen in einer Tabelle nach einer oder mehreren Spalten zu sortieren. Sie ermöglicht es Ihnen, Ihre Daten nach bestimmten Kriterien in aufsteigender (A-Z, 1-10) oder absteigender (Z-A, 10-1) Reihenfolge anzuordnen.

Nach der ORDER BY -Klausel geben Sie normalerweise die Spalte an, nach der Sie die Daten sortieren möchten. Es mag Sie jedoch überraschen zu erfahren, dass Sie auch eine Syntax wie ORDER BY 1 in einer SQL-Abfrage verwenden können. Die Syntax für eine solche Abfrage lautet wie folgt:

SELECT column_name(s)
FROM table_name
ORDER BY 1;

Wenn Sie diese Art von Code in SQL-Abfragen gesehen haben und verwirrt waren, machen Sie sich keine Sorgen! Am Ende dieses Artikels werden Sie genau verstehen, wie er funktioniert und wann er zu verwenden ist. Und wenn Sie während des Lesens dieses Artikels die SQL-Syntax noch einmal auffrischen müssen, dann zögern Sie nicht, sich unser praktisches SQL für Anfänger Cheat Sheet anzusehen!

Um wirklich gut in SQL zu werden, sollten Sie es üben. Wenn Sie viele Übungsaufgaben bearbeiten möchten, empfehlen wir Ihnen unseren SQL-Praxis Pfad. Sie lernen, indem Sie reale Probleme lösen und dabei unseren Online-Code-Editor und echte Datensätze verwenden. Dieser Pfad besteht aus neun Kursen und über 1.100 praktischen Übungen zum Üben.

Lassen Sie uns ORDER BY 1 in Aktion sehen!

Stellen Sie sich vor, Sie haben eine Tabelle namens movie mit den folgenden Spalten:

  • id - Die ID des Films, die auch der Primärschlüssel (PK) der Tabelle ist.
  • title - Der Titel des Films.
  • length - Die Länge des Films in Minuten.
  • director - Der Name des Regisseurs des Films.
  • year - Das Jahr, in dem der Film erstmals veröffentlicht wurde.
  • rating - Die Bewertung des Films (von 1 bis 10).

Hier sehen Sie eine Handvoll Zeilen aus der Tabelle:

idtitlelengthdirectoryearrating
1The Secret Quest110David Anderson20227
2Lost in Time95Emily Roberts20196
3Starship Odyssey150Michael Turner20218
4The Enchanted Forest85Sarah Johnson20227
5Epic Journey130Mark Lewis20207
6Space Explorers115Lisa Adams20227
7Time Travelers100Paul Miller20216
8Mystic Island140Jessica White20238
9The Great Discovery105Robert Green20217
10Underwater120Mary Johnson20216

Was passiert, wenn wir die folgende Abfrage ausführen?

SELECT 
	title,
	length,
	director
FROM movie
ORDER BY 1;

Durch die Angabe von ORDER BY 1 weisen wir die Datenbank an, die Ergebnisse anhand der ersten Spalte in der Liste SELECT zu sortieren, die in diesem Fall title ist.

Das bedeutet, dass die obige Abfrage mit dieser gleichzusetzen ist:

SELECT 
	title,
	length,
	director
FROM movie
ORDER BY title;

Die erste Abfrage ist etwas kürzer, kann aber schwieriger zu verstehen sein. Bei der zweiten Abfrage können Sie leicht erkennen, welche Spalte für die Sortierung verwendet wird. Dadurch wird die Wahrscheinlichkeit eines Fehlers verringert.

Dies ist das Ergebnis unserer Abfrage:

titlelengthdirector
Epic Journey130Mark Lewis
Lost in Time95Emily Roberts
Mystic Island140Jessica White
Space Explorers115Lisa Adams
Starship Odyssey150Michael Turner
The Enchanted Forest85Sarah Johnson
The Great Discovery105Robert Green
The Secret Quest110David Anderson
Time Travelers100Paul Miller
Underwater120Mary Johnson

Wenn sich die Reihenfolge der ausgewählten Spalten ändern würde, müssten Sie eine andere Spaltennummer verwenden:

SELECT
	director,
	title,
	length
FROM movie
ORDER BY 2;

Wie Sie sehen, kann die Verwendung dieser Syntax ein wenig kompliziert sein.

Wussten Sie, dass Sie eine ähnliche Syntax in der GROUP BY Klausel verwenden können? Sehen Sie sich unseren Artikel über die GROUP BY 1-Syntax an!

Aufsteigende und absteigende Reihenfolge

Standardmäßig sortiert die ORDER BY Klausel die Ergebnisse vom niedrigsten zum höchsten Wert - also in aufsteigender Reihenfolge. Es kann jedoch vorkommen, dass Sie die Daten in absteigender Reihenfolge sortieren müssen. Das können Sie auch mit der ORDER BY 1 -Syntax erreichen. Fügen Sie dazu einfach das Schlüsselwort ASC oder DESC nach 1 ein.

Wenn Sie zum Beispiel die Liste der Filme abrufen und vom längsten zum kürzesten sortieren möchten, könnten Sie eine Abfrage wie die folgende ausführen:

SELECT
	title,
	length,
	director
FROM movie
ORDER BY 2 DESC;

Die obige Abfrage ist das Äquivalent zu:

SELECT
	title,
	length,
	director
FROM movie
ORDER BY length DESC;

Und hier ist das Ergebnis unserer Abfrage:

titlelengthdirector
Starship Odyssey150Michael Turner
Mystic Island140Jessica White
Epic Journey130Mark Lewis
Underwater120Mary Johnson
Space Explorers115Lisa Adams
The Secret Quest110David Anderson
The Great Discovery105Robert Green
Time Travelers100Paul Miller
Lost in Time95Emily Roberts
The Enchanted Forest85Sarah Johnson

Was bedeutet ORDER BY 1, 2, 3?

In unserem vorherigen Beispiel haben wir die Daten nach nur einer Spalte sortiert. Jetzt möchten wir unsere Zeilen nach drei verschiedenen Spalten sortieren: year, rating, und title.

Dazu können wir die folgende Abfrage verwenden:

SELECT
	year,
	rating,
	title
FROM movie
ORDER BY 1, 2, 3;

Wenn Sie ORDER BY mit mehreren Spalten verwenden, sortiert die Datenbank die Zeilen zunächst auf der Grundlage der ersten angegebenen Spalte. Wenn es doppelte Werte in der ersten Spalte gibt, sortiert die Datenbank diese Zeilen weiter nach der zweiten angegebenen Spalte usw. Wenn Sie ORDER BY 1, 2, 3 verwenden, weisen wir die Datenbank an, die Ergebnisse nach der ersten, zweiten und dritten Spalte in der Liste SELECT zu sortieren.

Dies ist gleichbedeutend mit der Ausführung der folgenden Abfrage:

SELECT
year,
rating,
title
FROM movie
ORDER BY year, rating, title;

Die Abfrage gibt Folgendes zurück:

yearratingtitle
20196Lost in Time
20207Epic Journey
20216Time Travelers
20216Underwater
20217The Great Discovery
20218Starship Odyssey
20227Space Explorers
20227The Enchanted Forest
20227The Secret Quest
20238Mystic Island

Die obige Abfrage sortiert die Ergebnisse in aufsteigender Reihenfolge für alle Spalten. Was wäre, wenn wir die Ergebnisse nach dem Jahr vom neuesten bis zum ältesten, dann nach der Bewertung vom höchsten bis zum niedrigsten und schließlich alphabetisch nach dem Titel sortieren wollten? Wir können all dies tun, indem wir ASC oder DESC nach jeder Spalte schreiben:

SELECT
	year,
	rating,
	title
FROM movie
ORDER BY 1 DESC, 2 DESC, 3 ASC;

Das Ergebnis dieser Abfrage ist:

yearratingtitle
20238Mystic Island
20227Space Explorers
20227The Enchanted Forest
20227The Secret Quest
20218Starship Odyssey
20217The Great Discovery
20216Time Travelers
20216Underwater
20207Epic Journey
20196Lost in Time

Beachten Sie, dass die Spaltennummern in der ORDER BY Klausel nicht fortlaufend sein müssen. Sie können auch eine Abfrage wie diese schreiben:

SELECT
	title,
	year,
	rating
FROM movie
ORDER BY 2 DESC, 3 DESC, 1 ASC;

Jetzt weisen wir die Datenbank an, die Ergebnisse auf der Grundlage der zweiten, dritten und ersten Spalte in der Liste SELECT zu gruppieren.

Sie können auch Spaltennummern und Namen in einer einzigen ORDER BY Klausel mischen:

SELECT
	title,
	year,
	rating
FROM movie
ORDER BY 2 DESC, 3 DESC, title ASC;

In diesem Fall gruppieren wir die Ergebnisse auf der Grundlage der zweiten und dritten Spalte in der Liste SELECT und der Spalte title.

Die obigen Abfragen ergeben Folgendes:

titleyearrating
Mystic Island20238
Space Explorers20227
The Enchanted Forest20227
The Secret Quest20227
Starship Odyssey20218
The Great Discovery20217
Time Travelers20216
Underwater20216
Epic Journey20207
Lost in Time20196

Achtung! Verwenden Sie nicht die ORDER BY 1-Syntax

Die Verwendung der ORDER BY 1 und ORDER BY 1, 2, 3 Syntax in SQL wird im Allgemeinen als schlechte Praxis angesehen, da sie das Lesen und die Wartung Ihrer Abfragen erschwert. Sie kann Ihnen zwar einige Tipparbeit ersparen, kann aber auch unerwartete Probleme verursachen.

Das Hauptproblem bei diesem Ansatz ist, dass er sich auf die Reihenfolge der Spalten in Ihrer SELECT -Anweisung verlässt, anstatt die Spaltennamen direkt anzugeben. Wenn sich die Reihenfolge der Spalten ändert oder neue Spalten hinzugefügt werden, können sich Ihre Abfrageergebnisse in einer Weise ändern, die Sie nicht erwartet haben.

Angenommen, Sie verwenden die folgende Abfrage, um die Liste der Filme zu erhalten, sortiert nach Jahr vom neuesten bis zum ältesten, dann nach Bewertung vom höchsten bis zum niedrigsten und schließlich nach Titel in alphabetischer Reihenfolge:

SELECT
	title,
	year,
	rating
FROM movie
ORDER BY 2 DESC, 3 DESC, 1 ASC;

Nun stellen wir uns vor, dass wir auch den Namen des Regisseurs in unserer Liste anzeigen möchten. Dies können wir erreichen, indem wir die Abfrage ein wenig abändern:

SELECT
	title,
	director,
	year,
	rating
FROM movie
ORDER BY 2 DESC, 3 DESC, 1 ASC;

Aber wenn wir diese Abfrage ausführen, erhalten wir nicht die richtige Antwort! Das ist das Ergebnis, das wir erhalten:

titledirectoryearrating
The Enchanted ForestSarah Johnson20227
The Great DiscoveryRobert Green20217
Time TravelersPaul Miller20216
Starship OdysseyMichael Turner20218
UnderwaterMary Johnson20216
Epic JourneyMark Lewis20207
Space ExplorersLisa Adams20227
Mystic IslandJessica White20238
Lost in TimeEmily Roberts20196
The Secret QuestDavid Anderson20227

Es sieht so aus, als ob die Zeilen nicht wie beabsichtigt nach year, rating und title sortiert sind. Dies zeigt die möglichen Fallstricke, wenn man sich auf die Spaltenreihenfolge verlässt, anstatt die Spaltennamen direkt in der ORDER BY Klausel anzugeben. Können Sie den Fehler in unserer geänderten Abfrage erkennen?

Das Ergebnis ist falsch, weil wir versucht haben, unsere Zeilen nach den Spalten director, year und title zu sortieren, anstatt nach Jahr, Bewertung und Titel.

Die korrekte Abfrage würde wie folgt aussehen:

SELECT
	title,
	director,
	year,
	rating
FROM movie
ORDER BY 3 DESC, 4 DESC, 1 ASC;

Wir können diesen Fehler jedoch verhindern, indem wir einfach die ORDER BY Klausel mit den vollständigen Spaltennamen verwenden:

SELECT
	title,
	director,
	year,
	rating
FROM movie
ORDER BY year DESC, rating DESC, title ASC;

Selbst wenn wir in der Anweisung SELECT Spalten ändern oder verschieben wollen, müssen wir nicht mehr an den Teil ORDER BY denken.

Wie Sie sehen, ist es besser, die Namen der Spalten, nach denen Sie sortieren wollen, in der ORDER BY -Klausel explizit zu erwähnen. Dadurch wird Ihre Abfrage einfacher zu lesen und weniger fehleranfällig.

Der ORDER BY 1 Trick ist in Ordnung, wenn Sie sich die Daten nur selbst ansehen und die Eingabe beschleunigen wollen. Wenn Sie jedoch vorhaben, die Abfrage in irgendeiner Weise wiederzuverwenden, ist es besser, die vollständige Syntax mit Spaltennamen zu verwenden.

Möchten Sie mehr über ORDER BY 1 erfahren?

Das ist alles, was wir für heute haben! Wenn Sie mehr über die Verwendung der ORDER BY -Klausel erfahren möchten, lesen Sie unsere Artikel, um zu lernen, wie man ORDER BY im Detail verwendet, und um einige praktische Beispiele für die Verwendung von ORDER BY zu sehen.

Und für weitere praktische Übungen sollten Sie sich unseren SQL-Praxis Track ansehen!