Select
Die Anweisung SELECT ist eine weitere sehr wichtige Anweisung.
Nachdem wir nun Daten in unsere Tabellen eingefügt haben, wollen wir sie auch lesen.
Die SELECT-Anweisung gibt immer ein Result Set zurück.
Diese Result Set enthält alle von uns angeforderten Daten.
Beachte, dass die Bezeichnung Result Set nicht bedeutet, dass die Ergebnisse in irgendeiner Weise einzigartig sind.
Basic select
Die reine Basic-Select-Anweisung ist recht einfach:
Diese Anweisung gibt dir den Inhalt von id und name der Tabelle player.
| id | player_name |
|---|---|
| 1 | Mike |
| 2 | Sarah |
| 3 | John |
| 4 | Lilly |
| 5 | Matthias |
| 6 | Lenny |
| 7 | Sommer |
| 8 | Heiraten |
| 9 | Milana |
| 10 | Lexi |
Wenn du eine solche Anweisung siehst oder schreibst, wählst du vielleicht viel mehr aus, als du brauchst.
Von der Verwendung der einfachen SELECT-Anweisung kann generell abgeraten werden.
In 99% dieser Fälle gibt es bessere und verfeinerte Anweisungen.
Lies, was du brauchst
Das ist im Allgemeinen immer eine gute Sache, die man sich merken sollte. Lies nie mehr Daten aus der Datenbank, als du brauchst. Die folgenden Schlüsselwörter helfen dir dabei.
Column Alias
Mit dem Schlüsselwort AS können wir Spalten umbenennen, wenn wir sie auswählen
Gibt zurück:
| id | name |
|---|---|
| 1 | Mike |
| 2 | Sarah |
| 4 | Lilly |
| 5 | Matthias |
| 6 | Lenny |
| 7 | Sommer |
| 8 | Heiraten |
| 9 | Milana |
| 10 | Lexi |
| 3 | John |
Die Spalte player_name heißt jetzt name in unserem Result Set
Tabellen-Alias
Auch Tabellen können Aliasnamen haben. Du wirst sie jetzt nicht brauchen, aber in der Regel werden sie direkt hinter dem Tabellennamen definiert.
Sie werden verwendet, um einen eindeutigen Tabellennamen zu definieren, wenn du eine Tabelle mehrmals verwendest. Sie werden auch verwendet, um lange Tabellennamen abzukürzen, wenn du den Namen explizit verwenden musst.
WHERE
Die WHERE-Anweisung ist eine der wichtigsten Schlüsselwörter in sql.
Das WHERE-Schlüsselwort wertet für jede Zeile einen Booleschen Wert aus und bestimmt, ob eine Zeile zurückgegeben wird oder nicht.
Erinnere dich an die logischen Operatoren in diesem Kapitel.
- Die Bedingung kann alles sein. Es können auch mehrere Bedingungen oder Prüfungen sein, die mit
ANDoderORkombiniert werden. Die Spalte, die du prüfst, muss nicht in derSELECT-Anweisung selbst enthalten sein.
Versuche, alle Spieler mit einer id größer als 5 auszuwählen.
Am Ende solltest du eine Tabelle wie diese haben:
| id | player_name | last_online |
|---|---|---|
| 6 | Lenny | 2022-03-08 00:00:00.000000 |
| 7 | Sommer | 2022-05-22 00:00:00.000000 |
| 8 | Heiraten | 2022-06-04 00:00:00.000000 |
| 9 | Milana | 2022-02-12 00:00:00.000000 |
| 10 | Lexi | 2022-02-22 00:00:00.000000 |
Alles, was wir hier brauchen, ist eine einfache Überprüfung der id-Spalte.
Wir können hier auch spezifischer werden.
Fügen wir eine weitere Prüfung für alle player_names hinzu, die mit dem Buchstaben "m" beginnen (Groß- und Kleinschreibung wird nicht berücksichtigt) erhalten wir diese tabelle:
| id | player_name | last_online |
|---|---|---|
| 8 | Marry | 2022-06-04 00:00:00.000000 |
| 9 | Milana | 2022-02-12 00:00:00.000000 |
Lösung
**MySQL, MariaDB, SqLite** Das Schlüsselwort `LIKE` vergleicht unabhängig von der Groß- und Kleinschreibung. Das `%` ist ein Platzhalter für eine unendliche Anzahl anderer Zeichen. **PostgreSQL** Im Gegensatz zu anderen Datenbanken wird bei Postgres bei `LIKE` zwischen Groß- und Kleinschreibung unterschieden. Deshalb müssen wir hier `ILIKE` verwenden.Du kannst weitere Bedingungen aneinanderreihen oder ein OR anstelle des AND ausprobieren und schauen, wie sich die Ausgabe verändert.
ORDER BY
Derzeit werden unsere Spieler in der Reihenfolge abgefragt, in der sie in die Datenbank eingefügt wurden. Das muss nicht unbedingt die Reihenfolge sein, die wir wollen.
Nehmen wir an, wir wollen unsere Spieler in der Reihenfolge abrufen, in der sie zuletzt gesehen wurden, d.h. die neuesten Spieler zuerst und die inaktiven Spieler zuletzt.
Das können wir erreichen, indem wir das Schlüsselwort ORDER BY für die Spalte last_online verwenden.
Der allgemeine Syntax lautet:
- Die ASC (aufsteigend) oder DESC (absteigend) Klausel legt die Sortierreihenfolge fest. ASC ist die Standardeinstellung.
Versuche, eine Abfrage zu definieren, um die Tabelle player nach last_online in absteigender Reihenfolge zu sortieren.
Wir wollen diese Tabelle am Ende haben:
| id | player_name | last_online |
|---|---|---|
| 8 | Heiraten | 2022-06-04 00:00:00.000000 |
| 7 | Sommer | 2022-05-22 00:00:00.000000 |
| 1 | Mike | 2022-05-11 00:00:00.000000 |
| 3 | John | 2022-04-08 00:00:00.000000 |
| 2 | Sarah | 2022-04-04 00:00:00.000000 |
| 4 | Lilly | 2022-04-01 00:00:00.000000 |
| 6 | Lenny | 2022-03-08 00:00:00.000000 |
| 5 | Matthias | 2022-03-06 00:00:00.000000 |
| 10 | Lexi | 2022-02-22 00:00:00.000000 |
| 9 | Milana | 2022-02-12 00:00:00.000000 |
Die ORDER BY Klausel definiert die Spalte, nach der wir sortieren wollen.
Das Schlüsselwort DESC sagt SQL, dass wir eine absteigende Reihenfolge wollen.
Wenn wir keine Reihenfolge festlegen, werden die Elemente immer in aufsteigender Reihenfolge sortiert.
Wir können auch nach mehreren Spalten sortieren.
In diesem Fall werden sie zuerst nach der ersten Spalte sortiert und jeder Wert mit einem gleichen Wert wird nach dem zweiten Wert sortiert.
Lasst uns als zweites Beispiel nach dem ersten Zeichen des player_names und der id sortieren.
Um das erste Zeichen eines Strings zu erhalten, müssen wir wieder eine Funktion verwenden.
substr(player_name, 1, 1) gibt das erste Zeichen des player_name zurück.
Am Ende wollen wir eine Tabelle wie diese:
| id | player_name | last_online |
|---|---|---|
| 3 | John | 2022-04-08 00:00:00.000000 |
| 4 | Lilly | 2022-04-01 00:00:00.000000 |
| 6 | Lenny | 2022-03-08 00:00:00.000000 |
| 10 | Lexi | 2022-02-22 00:00:00.000000 |
| 1 | Mike | 2022-05-11 00:00:00.000000 |
| 5 | Matthias | 2022-03-06 00:00:00.000000 |
| 8 | Heiraten | 2022-06-04 00:00:00.000000 |
| 9 | Milana | 2022-02-12 00:00:00.000000 |
| 2 | Sarah | 2022-04-04 00:00:00.000000 |
| 7 | Sommer | 2022-05-22 00:00:00.000000 |
Du siehst, dass wir zuerst nach dem ersten Buchstaben des Namens sortieren und alle Namen mit demselben ersten Buchstaben nach der id.
LIMIT
Das Schlüsselwort LIMIT ist ebenfalls sehr wichtig, um übermäßig große Lesevorgänge zu vermeiden.
Die allgemeine Syntax lautet:
Das Schlüsselwort LIMIT schränkt die Menge deiner Ergebnisse auf die eingegebene Zahl n ein.
Alternativ kannst du auch ALL oder NULL verwenden, um den Parameter zu deaktivieren.
Das ist etwas, was Frameworks manchmal benutzen, um ein Limit zu deaktivieren.
Zuvor haben wir die Spieler bereits nach den letzten Online-Zeiten sortiert.
Versuchen wir nun, nur die letzten 5 Spieler zu erhalten, indem wir das LIMIT-Schlüsselwort zu unserer vorherigen Abfrage hinzufügen.
Tipp: Das Limit ist immer der letzte Parameter deiner Abfrage.
| id | player_name | last_online |
|---|---|---|
| 8 | Heiraten | 2022-06-04 00:00:00.000000 |
| 7 | Sommer | 2022-05-22 00:00:00.000000 |
| 1 | Mike | 2022-05-11 00:00:00.000000 |
| 3 | John | 2022-04-08 00:00:00.000000 |
| 2 | Sarah | 2022-04-04 00:00:00.000000 |
OFFSET
Das Schlüsselwort OFFSET wird oft verwendet, um eine Aufteilung der Ergebnisse zu ermöglichen.
Deshalb wird es auch oft mit LIMIT kombiniert.
Mit dem Schlüsselwort OFFSET werden die ersten n Zeilen der Result Sets übersprungen.
Die allgemeine Syntax lautet:
Versuchen wir, unsere Abfrage aus dem Limit-Teil noch zu erweitern.
Wir haben bereits die ersten 5 Einträge erhalten.
Jetzt wollen wir die nächsten 5 Einträge erhalten, indem wir einen OFFSET von 5 hinzufügen und dabei die Schlüsselwörter LIMIT und ORDER BY beibehalten.
*Hinweis: Das Schlüsselwort OFFSET steht direkt vor dem Schlüsselwort LIMIT.
| id | player_name | last_online |
|---|---|---|
| 4 | Lilly | 2022-04-01 00:00:00.000000 |
| 6 | Lenny | 2022-03-08 00:00:00.000000 |
| 5 | Matthias | 2022-03-06 00:00:00.000000 |
| 10 | Lexi | 2022-02-22 00:00:00.000000 |
| 9 | Milana | 2022-02-12 00:00:00.000000 |
Was hier im Grunde genommen passiert, ist Folgendes:
Zuerst ordnen wir die gesamte Tabelle nach der Spalte last_online.
Danach überspringen wir die ersten 5 Zeilen und lesen die nächsten 5 Zeilen.
Es ist wichtig, daran zu denken, dass wir zuerst die gesamte Tabelle sortieren müssen.
Das kann bei großen Tabellen sehr kostspielig sein.
Zum Glück gibt es Möglichkeiten, das schneller zu machen.
Das schauen wir uns später an.
Resümee
Wir haben jetzt die vier wichtigsten Schlüsselwörter zum Suchen, Sortieren und Eingrenzen der abgerufenen Daten gelernt. Die Schlüsselwörter müssen in einer bestimmten Reihenfolge verwendet werden und können nicht frei verändert werden.
Der allgemeine Syntax dafür ist: