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
AND
oderOR
kombiniert 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_name
s 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_name
s 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: