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 OFFSETmed 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 , WHEREmen före LIMIToch OFFSET. Om du skriver ORDER BYefter 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ändasASC

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 BYlå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).