4.1 GRÄNS
Om du förväntar dig att din SQL-fråga ska returnera för mycket data kan du begränsa det maximala antalet i förväg. När allt kommer omkring kan tabeller innehålla tusentals eller till och med miljontals rader.
SQL gör det mycket enkelt att begränsa antalet rader i resultatet av en fråga med hjälp av LIMIT
. Det här nyckelordet används i slutet av SQL-frågan och ser ut så här:
LIMIT quantity
Låt oss skriva en fråga mot produkttabellen, som innehåller en lista över vår butiks produkter. Men eftersom vi har en mycket framgångsrik butik och vi säljer många produkter vill vi bara få de första 10 raderna av svaret. Så här skulle begäran se ut:
SELECT * FROM product
LIMIT 10
Och vi får följande frågeresultat:
id | namn | varumärke | pris | räkna |
---|---|---|---|---|
1 | Tabell | IKEA | 20.00 | 15 |
2 | Stol | IKEA | 5.00 | 45 |
3 | Soffa | IKEA | 80.00 | 10 |
4 | Säng | IKEA | 75,00 | 10 |
5 | Garderob | Bosch | 125.00 | 15 |
6 | Hylla | Hylla | 25.00 | 114 |
7 | TV | LG | 350,00 | 4 |
8 | Lampa | LG | 15.00 | 100 |
9 | Byrå | IKEA | 99,00 | 10 |
10 | Tallrik | Bosch | 199.00 | 10 |
Nu kommer vi att begära endast de första 5 raderna. Så här skulle begäran se ut:
SELECT * FROM product
LIMIT 5
Vi får följande frågeresultat:
id | namn | varumärke | pris | räkna |
---|---|---|---|---|
1 | Tabell | IKEA | 20.00 | 15 |
2 | Stol | IKEA | 5.00 | 45 |
3 | Soffa | IKEA | 80.00 | 10 |
4 | Säng | IKEA | 75,00 | 10 |
5 | Garderob | Bosch | 125.00 | 15 |
4.2 OFFSET
Förra gången lärde vi oss hur man begränsar antalet rader i serversvaret. Och nu, istället för tusentals rader från produkttabellen, kan vi hämta de första 10 raderna och visa dem för användaren. Det är perfekt. Men hur visar vi de andra 10 raderna? Och den tredje?
Om vi skriver LIMIT 20
, eller LIMIT 30
, returnerar inte servern 20 respektive 30 rader?
Det är för det här fallet som SQL har ett speciellt nyckelord OFFSET
med vilket du kan be servern att hoppa över N rader i sitt svar. Det här nyckelordet används i slutet av SQL-frågan (efter LIMIT
) och ser ut så här:
OFFSET quantity
Låt oss skriva en fråga på produkttabellen och försöka få posterna 11 till 15. Med andra ord ber vi servern att returnera 5 rader till oss, men hoppa över de första 10 raderna av svaret först. Så här skulle begäran se ut:
SELECT * FROM product
LIMIT 5
OFFSET 10
Vi får följande frågeresultat:
id | namn | varumärke | pris | räkna |
---|---|---|---|---|
elva | Fåtölj | Bosch | 44.00 | 8 |
12 | blomkruka | Smartflower | 99,00 | 9 |
13 | Stå | IKEA | 100,00 | 10 |
Servern returnerade endast 3 rader, vilket betyder att det fanns 13 rader totalt i vår tabell. Servern hoppade över de första 10 och returnerade de nästa 5.
4.3 VÄLJ DISTINKT
Ett annat användbart nyckelord är DISTINCT
. Den används när det finns dubbletter i tabellen och vi vill ta bort dubbletterna.
Var kommer dubbletter ifrån i vår tabell? Det kanske inte finns dubbletter i tabellen, men som ett resultat av frågan är det enkelt. Låt oss skriva en fråga som kommer att returnera varumärkena för alla produkter vi säljer. Så här skulle begäran se ut:
SELECT brand FROM product
Vi får följande frågeresultat:
varumärke |
---|
IKEA |
IKEA |
IKEA |
IKEA |
Bosch |
Bosch |
LG |
LG |
IKEA |
Bosch |
Bosch |
Smartflower |
IKEA |
Det är lätt att se att det finns dubbletter av rader i den här tabellen. Det är för att säkerställa att det inte finns några dubbletter och du måste använda nyckelordet DISTINCT
. Så här kommer den korrigerade begäran att se ut:
SELECT DISTINCT brand
FROM product
Vi får följande frågeresultat:
varumärke |
---|
IKEA |
Bosch |
LG |
Smartflower |
Så mycket bättre. Är det inte? ;)
4.4 BESTÄLL AV
Och äntligen fick vi sortera . För att sortera resultaten av en fråga måste du använda nyckelordet ORDER BY
. Tekniskt sett är detta två ord, men essensen är inte viktig. Två ord, en operatör.
Det måste skrivas efter nyckelordet , WHERE
men före LIMIT
och OFFSET
. Om du skriver ORDER BY
efter LIMIT
, kommer SQL-servern helt enkelt att returnera ett felmeddelande till dig.
I allmänhet ser den här operatören ut så här:
ORDER BY column order
Där kolumn är namnet på kolumnen i tabellen/sorteringsresultatet. Och ordningen är sorteringsordningen.
Sorteringsordningen kan vara av tre typer:
ASC
(från stigande) - stigande;DESC
(från fallande) - fallande;- Ej specificerat - kommer att användas
ASC
Låt oss skriva en fråga som kommer att returnera en lista med produkter sorterade efter pris i stigande ordning. Så här skulle begäran se ut:
SELECT * FROM product
ORDER BY price ASC
LIMIT 10
Vi får följande frågeresultat:
id | namn | varumärke | pris | räkna |
---|---|---|---|---|
2 | Stol | IKEA | 5.00 | 45 |
8 | Lampa | LG | 15.00 | 100 |
1 | Tabell | IKEA | 20.00 | 15 |
6 | Hylla | Bosch | 25.00 | 114 |
elva | Fåtölj | Bosch | 44.00 | 8 |
4 | Säng | IKEA | 75,00 | 10 |
3 | Soffa | IKEA | 80.00 | 10 |
12 | blomkruka | Smartflower | 99,00 | 9 |
9 | Byrå | IKEA | 99,00 | 10 |
13 | Stå | IKEA | 100,00 | 10 |
Vi kommer att få samma resultat om vi inte anger sorteringsordningen - vi hoppar över ordet ASC
.
4.5 BESTÄLL EFTER över flera kolumner
Operatören ORDER BY
låter dig sortera resultatet efter flera kolumner. Detta kan vara mycket användbart när den första kolumnen har många dubbletter av element. Den allmänna formen för denna operatör är följande:
ORDER BY column 1 order 1, column 2 order 2, column 3 order 3
Med andra ord, om du efter sortering efter den första kolumnen har flera identiska värden i närheten, så sorteras de efter den andra kolumnen och så vidare.
Låt oss skriva en fråga som kommer att sortera våra produkter efter märke och för produkter med samma märke - i fallande ordning efter deras nummer. Så här skulle begäran se ut:
SELECT * FROM product
ORDER BY brand ASC, count
DESC
Vi får följande frågeresultat:
id | namn | varumärke | pris | räkna |
---|---|---|---|---|
6 | Hylla | Bosch | 25.00 | 114 |
5 | Garderob | Bosch | 125.00 | 15 |
10 | Tallrik | Bosch | 199.00 | 10 |
elva | Fåtölj | Bosch | 44.00 | 8 |
2 | Stol | IKEA | 5.00 | 45 |
1 | Tabell | IKEA | 20.00 | 15 |
9 | Byrå | IKEA | 99,00 | 10 |
13 | Stå | IKEA | 100,00 | 10 |
4 | Säng | IKEA | 75,00 | 10 |
3 | Soffa | IKEA | 80.00 | 10 |
8 | Lampa | LG | 15.00 | 100 |
7 | TV | LG | 350,00 | 4 |
12 | blomkruka | Smartflower | 99,00 | 9 |
Titta noga på tabellen - dess rader är sorterade efter varumärke (alfabetisk ordning), och rader med samma varumärke sorteras efter produktnummer i fallande ordning (sista kolumnen).