Sortieren mit SQL

Mensch Smith, das war echt hilfreich! Ich weiß jetzt durch deine Recherche, dass Lanzilotti die Kohle …

Ja, schon gut. Ich habe gerade ganz dringende …

Jetzt nicht mehr. Frau Rousseau braucht ein paar Listen. Ich soll direkt warten und sie mitnehmen. Macht es dir was aus, wenn ich mich so lange auf dein Sofa knalle und mich kurz ausruhe?

Die Listen und Tabellen, die Sie mir da immer geben, mit denen kann ich nichts anzufangen. Die sind überhaupt nicht sinnvoll sortiert. Bitte erledigen Sie das ausnahmsweise mal etwas zügig. Ich habe Ihnen hier skizziert, was ich brauche.

Personen: Kontostand absteigend; nochmal Personen nach Geburtsdatum absteigend; nochmal Personen, monatliches Einkommen absteigend, und dann nochmal Personen: Nachname, dann Vorname, dann Geburtsdatum, alles aufsteigend ; Krankheiten: Bezeichnung aufsteigend; Straftaten: Strafmaß aufsteigend, dann Tatbestand alphabetisch; Standorte Bezeichnung aufsteigend, dann Straße aufsteigend, dann Hausnummer absteigend;  Waren Preis aufsteigend, dann Bezeichnung; nochmal Waren Preis absteigend, dann Bezeichnung.

gez. ROUSSEAU

???!?? Was will sie? Ich verstehe kein Wort?

Frag doch deinen Ösal. Ich wette, der hat ihr das eingeflüstert.

Der liegt auf dem Sofa und pennt. Kein Bock auf ihn. Kannst du mir das nicht kurz erklären?

*seufz Das ist ganz einfach. Sie will einfach, dass du deine Ergebnisse sortierst. Wahrscheinlich sind deine Listen nach Primärschlüssel sortiert, also z. B. nach id oder pNr. Das interessiert sie natürlich nicht. Sie will zum Beispiel wissen, welche Personen am meisten Geld auf dem Konto haben.

Und wie geht das? Schreib's mir doch bitte auf, ich vergesse solches Zeug immer so schnell …

Ergebnisse sortieren

Du sortierst deine Ergebnislisten, indem du angibst, nach welchem Attribut du sortieren willst:

select *
from personen p
order by p.nachname ASC;

Das ASC steht für "ascending" (aufsteigend) - es wird also a, b, c … oder 1, 2, 3 sortiert.

Wenn du "descending" (absteigend) sortieren willst, schreibst du DESC:

select *
from personen p
order by p.kontostand DESC;

Dann kannst du nach mehreren Attributen sortieren - wenn das zu sortierende Attribut in mehreren Datensätzen den gleichen Wert hat, wird das nächste Attribut genommen. Ein Klassiker ist: Sortiere nach Nachname, dann nach Vorname. Wenn du bei den "Müller" bist, wird innerhalb der Müllers nach Vorname sortiert:

select *
from personen p
order by p.nachname ASC, p.vorname ASC;

Übrigens: Wenn du weder ASC noch DESC angibst, wird ASC sortiert. Ich rate dir, es immer anzugeben, das ist überschaubarer.

Die ORDER BY-Klausel steht immer am Schluss (nicht ganz, danach könntest du noch LIMIT schreiben, aber das brauchen wir jetzt noch nicht). Den Rest machst du wie gehabt mit WHERE o.ä., also bspw.

select *
from personen p
where p.haarfarbe = 'blond'
order by p.monatlichesEinkommen DESC;

Nochmal im Video erklären, bitte

Hm. Klingt nicht so schwierig. Ich hänge die Sortierung also immer an den Schluss. Also mal schauen, was die Rousseau alles will:

  1. Personen sortieren nach Geburtsdatum aufsteigend. (Interessant, mal sehen, wie alt die Ältesten im Dorf so sind.)
  2. Alle Männer sortieren nach monatlichem Einkommen absteigend.
  3. Personen sortieren nach Kontostand absteigend. (Aha, sie will sehen, wer die meiste Kohle auf dem Konto hat - gar nicht dumm …)
  4. Personen sortieren nach Nachname aufsteigend, dann Vorname aufsteigend, dann Geburtsdatum aufsteigend
  5. Krankheiten sortieren nach Bezeichnung aufsteigend
  6. Alle Straftaten mit mehr als 5 Jahren Strafmaß, nach Strafmaß absteigend, dann Tatbestand alphabetisch aufsteigend
  7. Standorte nach Bezeichnung aufsteigend, dann Straße aufsteigend, dann Hausnummer absteigend
  8. Waren nach Preis aufsteigend, dann Bezeichnung
  9. Waren nach Preis absteigend, dann Bezeichnung

Mein Gott, ist das eine Menge Papier … HEY, ÖSAL, WACH AUF!

Wie - was - wer …

Nimm diesen Stapel und schaff ihn aus diesem Büro und lass mich bitte eine halbe Stunde in Ruhe, in Ordnung?

(verschnupft) Hey hey hey, mal langsam! Ich denke, Frau Rousseau wird sich dafür interessieren, wie schroff du mit deinen Kollegen umgehst. (ab)

Der hat doch nicht alle …

*pock, pock

Also wenn ER das schon wieder ist, kann er was erleben!!! (reißt die Tür auf)