4.1 GRENZE
Wenn Sie erwarten, dass Ihre SQL-Abfrage zu viele Daten zurückgibt, können Sie die maximale Anzahl im Voraus begrenzen. Schließlich können Tabellen Tausende oder sogar Millionen Zeilen enthalten.
SQL macht es sehr einfach, die Anzahl der Zeilen im Ergebnis einer Abfrage mithilfe von zu begrenzen LIMIT
. Dieses Schlüsselwort wird ganz am Ende der SQL-Abfrage verwendet und sieht folgendermaßen aus:
LIMIT quantity
Schreiben wir eine Abfrage für die Produkttabelle, die eine Liste der Produkte unseres Shops enthält. Da wir jedoch ein sehr erfolgreiches Geschäft haben und viele Produkte verkaufen, möchten wir nur die ersten 10 Zeilen der Antwort erhalten. So würde diese Anfrage aussehen:
SELECT * FROM product
LIMIT 10
Und wir erhalten das folgende Abfrageergebnis:
Ausweis | Name | Marke | Preis | zählen |
---|---|---|---|---|
1 | Tisch | IKEA | 20.00 | 15 |
2 | Der Stuhl | IKEA | 5.00 | 45 |
3 | Sofa | IKEA | 80,00 | 10 |
4 | Bett | IKEA | 75,00 | 10 |
5 | Kleiderschrank | Bosch | 125,00 | 15 |
6 | Regal | Regal | 25.00 | 114 |
7 | Fernseher | LG | 350,00 | 4 |
8 | Lampe | LG | 15.00 | 100 |
9 | Kommode | IKEA | 99,00 | 10 |
10 | Platte | Bosch | 199,00 | 10 |
Jetzt werden wir nur die ersten 5 Zeilen anfordern. So würde diese Anfrage aussehen:
SELECT * FROM product
LIMIT 5
Wir erhalten das folgende Abfrageergebnis:
Ausweis | Name | Marke | Preis | zählen |
---|---|---|---|---|
1 | Tisch | IKEA | 20.00 | 15 |
2 | Der Stuhl | IKEA | 5.00 | 45 |
3 | Sofa | IKEA | 80,00 | 10 |
4 | Bett | IKEA | 75,00 | 10 |
5 | Kleiderschrank | Bosch | 125,00 | 15 |
4.2 OFFSET
Beim letzten Mal haben wir gelernt, wie man die Anzahl der Zeilen in der Serverantwort begrenzt. Und jetzt können wir statt tausender Zeilen aus der Produkttabelle die ersten 10 Zeilen abrufen und sie dem Benutzer anzeigen. Es ist ausgezeichnet. Aber wie zeigen wir die zweiten 10 Zeilen an? Und der dritte?
LIMIT 20
Wenn wir , or schreiben LIMIT 30
, gibt der Server dann nicht 20 bzw. 30 Zeilen zurück?
Für diesen Fall gibt es in SQL ein spezielles Schlüsselwort, OFFSET
mit dem Sie den Server auffordern können, N Zeilen in seiner Antwort zu überspringen. Dieses Schlüsselwort wird ganz am Ende der SQL-Abfrage (nach LIMIT
) verwendet und sieht folgendermaßen aus:
OFFSET quantity
Schreiben wir eine Abfrage für die Produkttabelle und versuchen, die Datensätze 11 bis 15 abzurufen. Mit anderen Worten: Wir bitten den Server, 5 Zeilen an uns zurückzugeben, überspringen aber zuerst die ersten 10 Zeilen der Antwort. So würde diese Anfrage aussehen:
SELECT * FROM product
LIMIT 5
OFFSET 10
Wir erhalten das folgende Abfrageergebnis:
Ausweis | Name | Marke | Preis | zählen |
---|---|---|---|---|
elf | Sessel | Bosch | 44,00 | 8 |
12 | Blumentopf | Smartflower | 99,00 | 9 |
13 | Stand | IKEA | 100,00 | 10 |
Der Server hat nur 3 Zeilen zurückgegeben, was bedeutet, dass unsere Tabelle insgesamt 13 Zeilen enthielt. Der Server hat die ersten 10 übersprungen und die nächsten 5 zurückgegeben.
4.3 UNTERSCHIEDLICH AUSWÄHLEN
Ein weiteres nützliches Schlüsselwort ist DISTINCT
. Es wird verwendet, wenn die Tabelle doppelte Datensätze enthält und wir die Duplikate entfernen möchten.
Woher kommen Duplikate in unserer Tabelle? Die Tabelle enthält möglicherweise keine Duplikate, aber aufgrund der Abfrage ist dies einfach. Schreiben wir eine Abfrage, die die Marken aller von uns verkauften Produkte zurückgibt. So würde diese Anfrage aussehen:
SELECT brand FROM product
Wir erhalten das folgende Abfrageergebnis:
Marke |
---|
IKEA |
IKEA |
IKEA |
IKEA |
Bosch |
Bosch |
LG |
LG |
IKEA |
Bosch |
Bosch |
Smartflower |
IKEA |
Es ist leicht zu erkennen, dass diese Tabelle doppelte Zeilen enthält. Damit soll sichergestellt werden, dass es keine Duplikate gibt und Sie das Schlüsselwort verwenden müssen DISTINCT
. So sieht die korrigierte Anfrage aus:
SELECT DISTINCT brand
FROM product
Wir erhalten das folgende Abfrageergebnis:
Marke |
---|
IKEA |
Bosch |
LG |
Smartflower |
So viel besser. Oder? ;)
4.4 BESTELLEN NACH
Und schließlich kamen wir zum Sortieren . Um die Ergebnisse einer Abfrage zu sortieren, müssen Sie das Schlüsselwort verwenden ORDER BY
. Technisch gesehen sind das zwei Wörter, aber das Wesentliche ist nicht wichtig. Zwei Wörter, ein Operator.
Es muss nach dem Schlüsselwort geschrieben werden WHERE
, aber vor LIMIT
und OFFSET
. ORDER BY
Wenn Sie danach schreiben LIMIT
, gibt der SQL-Server einfach einen Fehler zurück.
Im Allgemeinen sieht dieser Operator so aus:
ORDER BY column order
Dabei ist Spalte der Name der Spalte im Tabellen-/Sortierergebnis. Und die Reihenfolge ist die Sortierreihenfolge.
Es gibt drei Arten der Sortierreihenfolge:
ASC
(von Aufsteigend) - aufsteigend;DESC
(von absteigend) - absteigend;- Keine Angabe – wird verwendet
ASC
Schreiben wir eine Abfrage, die eine Liste von Produkten zurückgibt, sortiert nach Preis in aufsteigender Reihenfolge. So würde diese Anfrage aussehen:
SELECT * FROM product
ORDER BY price ASC
LIMIT 10
Wir erhalten das folgende Abfrageergebnis:
Ausweis | Name | Marke | Preis | zählen |
---|---|---|---|---|
2 | Der Stuhl | IKEA | 5.00 | 45 |
8 | Lampe | LG | 15.00 | 100 |
1 | Tisch | IKEA | 20.00 | 15 |
6 | Regal | Bosch | 25.00 | 114 |
elf | Sessel | Bosch | 44,00 | 8 |
4 | Bett | IKEA | 75,00 | 10 |
3 | Sofa | IKEA | 80,00 | 10 |
12 | Blumentopf | Smartflower | 99,00 | 9 |
9 | Kommode | IKEA | 99,00 | 10 |
13 | Stand | IKEA | 100,00 | 10 |
Das gleiche Ergebnis erhalten wir, wenn wir die Sortierreihenfolge nicht angeben – wir überspringen das Wort ASC
.
4.5 ORDER BY über mehrere Spalten hinweg
Mit dem Operator ORDER BY
können Sie das Ergebnis nach mehreren Spalten sortieren. Dies kann sehr nützlich sein, wenn die erste Spalte viele doppelte Elemente enthält. Die allgemeine Form dieses Operators ist wie folgt:
ORDER BY column 1 order 1, column 2 order 2, column 3 order 3
Mit anderen Worten: Wenn Sie nach der Sortierung nach der ersten Spalte mehrere identische Werte in der Nähe haben, werden diese nach der zweiten Spalte sortiert und so weiter.
Schreiben wir eine Abfrage, die unsere Produkte nach Marke und Produkte derselben Marke in absteigender Reihenfolge ihrer Nummer sortiert. So würde diese Anfrage aussehen:
SELECT * FROM product
ORDER BY brand ASC, count
DESC
Wir erhalten das folgende Abfrageergebnis:
Ausweis | Name | Marke | Preis | zählen |
---|---|---|---|---|
6 | Regal | Bosch | 25.00 | 114 |
5 | Kleiderschrank | Bosch | 125,00 | 15 |
10 | Platte | Bosch | 199,00 | 10 |
elf | Sessel | Bosch | 44,00 | 8 |
2 | Der Stuhl | IKEA | 5.00 | 45 |
1 | Tisch | IKEA | 20.00 | 15 |
9 | Kommode | IKEA | 99,00 | 10 |
13 | Stand | IKEA | 100,00 | 10 |
4 | Bett | IKEA | 75,00 | 10 |
3 | Sofa | IKEA | 80,00 | 10 |
8 | Lampe | LG | 15.00 | 100 |
7 | Fernseher | LG | 350,00 | 4 |
12 | Blumentopf | Smartflower | 99,00 | 9 |
Schauen Sie sich die Tabelle genau an – ihre Zeilen sind nach Markennamen sortiert (alphabetische Reihenfolge), und Zeilen mit demselben Markennamen sind in absteigender Reihenfolge nach Produktnummer sortiert (letzte Spalte).
GO TO FULL VERSION