Informatik

Sortieren und begrenzen

Eine Relation ist eine Menge von Tupeln – eine Reihenfolge gibt es darin nicht. Wenn du eine willst, musst du sie anfordern.

Ohne ORDER BY ist die Reihenfolge des Ergebnisses nicht garantiert. Dass sie oft trotzdem sinnvoll aussieht, ist ein Nebeneffekt davon, wie das Datenbanksystem die Daten gerade findet – darauf verlassen darf man sich nicht.

ORDER BY

  • ASC sortiert aufsteigend (A→Z, 0→9). Das ist die Voreinstellung und darf weggelassen werden.
  • DESC sortiert absteigend.
  • Mehrere Spalten werden nacheinander ausgewertet: Erst nach der ersten, und nur bei Gleichstand entscheidet die zweite.
  • ORDER BY steht immer am Ende der Abfrage.

Sieh dir die dritte Abfrage an.

a) Welche Zeile steht ganz oben? Sag es voraus, bevor du ausführst.

b) Was ändert sich, wenn du die beiden Sortierspalten vertauschst?

c) Sortiere die Auftritte nach Datum und innerhalb eines Tages nach Beginn. Welcher Auftritt eröffnet das Festival?

Lösung. Erfrage das Passwort bei deiner Lehrkraft.

Doppelte entfernen

DISTINCT entfernt doppelte Ergebniszeilen. Es bezieht sich immer auf die gesamte Zeile, nicht auf eine einzelne Spalte: SELECT DISTINCT datum, buehne_id liefert jede Kombination aus Datum und Bühne einmal.

a) Wie viele Zeilen liefert die erste Abfrage, wie viele die zweite? Erkläre den Unterschied.

b) Wie viele verschiedene Instrumente werden auf dem Festival gespielt?

c) Die vierte Abfrage liefert weniger Zeilen als SELECT * FROM auftritt. Was bedeutet das inhaltlich?

Tipp: zu c)

Überlege, was passiert, wenn an einem Tag auf derselben Bühne mehrere Bands spielen.

Lösung. Erfrage das Passwort bei deiner Lehrkraft.

Die Ausgabe begrenzen

LIMIT n gibt höchstens n Zeilen aus, OFFSET k überspringt vorher k Zeilen.

LIMIT ist fast immer nur zusammen mit ORDER BY sinnvoll. Ohne Sortierung bekommst du irgendwelche n Zeilen – und beim nächsten Mal vielleicht andere.

LIMIT gehört streng genommen nicht zum SQL-Standard, sondern ist eine Erweiterung, die die meisten Systeme anbieten – SQLite, MySQL und PostgreSQL mit LIMIT, andere mit TOP oder FETCH FIRST.

Das ist typisch für SQL: Der Kern ist überall gleich, an den Rändern unterscheiden sich die Systeme. Wenn du eine Abfrage von einem System auf ein anderes überträgst, sind es meistens genau diese Ränder, die Ärger machen.

Aufgaben

a) Die drei ältesten Bands, mit Name und Gründungsjahr, älteste zuerst.

b) Alle verschiedenen Ticketkategorien.

c) Die fünf am besten besuchten Auftritte: Datum, Beginn und Zuschauerzahl, absteigend sortiert.

d) Alle Bühnen, nach Kapazität absteigend. Überlege vorher, welche Bühne oben steht.

Lösung. Erfrage das Passwort bei deiner Lehrkraft.

Selbsttest

Sortieren und begrenzen

Teilbare URL erstellen

Abschnitte auswählen